Maven学习笔记(二):Maven基础(基于IDEA)

简介: 【10月更文挑战第1天】Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。上一篇简单介绍了Maven的基础知识,本文主要介绍IDEA上的实际使用场景。内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。仅供参考。

回顾《Maven学习笔记(一):Maven基础(基于命令行的学习和应用)

  1. Maven的作用是管理jar包及其依赖关系;
  2. Maven仓库分为本地仓库、私服仓库(局域网)、远程仓库(外网)
  3. Maven生命周期分为:clean、site、default,常用clean和default
  1. clean生命周期:清理Maven编译和生成的文件
  2. default生命周期:包含编译compile、test、package、install、deploy等常用命令
  3. site生命周期:抽取Maven中关于项目的信息,可以生成一个项目信息站点,但需要完全按照Maven规范构建,一般用不到。
  4. 各生命周期间是独立的(mvn clean install),生命周期内部具有传递性(如mvn install 包含了compile、test、package、install)
  1. Maven的安装及配置
  2. Maven的核心是pom.xml,每个jar包(组件或插件)都对应为一个坐标(gav);作用域scope;打包方式packaging;依赖developments/developmentmanager;插件plugs;
  3. Maven构建普通Java工程:mvn archetype:generate
  4. Maven构建JavaWeb工程:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4


一、创建Maven工程

Maven工程创建之后,本质上就是一个独立的工程,我这里简称为”单工程“结构;

通过对pom文件的“继承和聚合”,让Maven工程具备了更高级的特性——工程模块管理;

而相对于命令行,在IDEA中将更容易上手。

(0)设置Maven

  1. 在IDEA中,设置Maven环境非常简单,进入设置页面有两种方法:一是在Maven选项卡中选中扳手,选择Maven Settings就可以进入;二是File > Settings… > Build,Execution,Deployment > Build Tools > Maven;
  2. 默认配置如下面第2张图,但是我们一般会选择使用自己安装的Maven路径和settings.xml,或者至少将仓库改为非系统盘;

  1. 下图是本次学习笔记场景下的Maven配置,三个参数都做了修改;

  1. 当然,也可以给所有新项目设置一个通用的配置,如下则是我工作环境下一直使用的配置。

  1. 配置完成后,点击Applyok,会自动加载;工作中引入依赖或修改可以手动点击Maven选项卡中的刷新按钮或者按快捷键Ctrl + Shift + M;一些版本可以配置自动导包,大概在下2图的位置(我的版本是IntelliJ IDEA 2021.1.1 (Ultimate Edition)未找到该配置)。

(1)Maven单工程

这里所说的创建Maven单工程,对应的命令是mvn archetype:generate,生成一个标准结构的Java工程;

  1. 如果在项目选项卡页面(Welcome to IntelliJ IDEA),点击New Project按钮,在右侧项目类型中,选择Maven创建新的Maven项目;不要选择Create from archetype ,直接点击Next

  1. 进入New Project页面,输入对应内容,点击Finish会创建并自动进入项目;这里项目名称为ideademo01

  1. 最终生成的工程结构及pom文件如下,与命令行生成稍有不同,但是工程结构是相同的;

  1. 如果在已经进入项目的状态,直接点击File>New>Project…,步骤与上述 2相同。

(2)Maven父/子工程

Q:在实际项目中,通常按照业务功能将项目拆分为多个Maven工程,每个工程单独构建将会非常难管理,那么如何有效管理这些工程呢?

A:实践是用一个工程作为其他工程的父工程来管理这些工程。而用作父工程,packaging打包方式配置为pom,且工程结构中只需要保留pom.xml,不再需要其他目录;代码都在子工程中进行编写。

现在,我们将ideademo01改造为父工程,在其中创建2个子工程;

  1. ideademo01项目中,选中ideademo01右键New Module…;或选中ideademo01,点击菜单栏中的File New Module…

  1. New Module页面parent选择父工程,并给子工程命名(这里的GroupId会继承父工程的GroupId),点击Finish完成创建;

  1. 此时项目结构如下图所示(ideademo01的打包方式packaging已经修改为pom,表示它是一个父工程;tools的pom文件中包含parent标签指向ideademo01表示其tools为子工程):

  1. 再按照创建tools的方法创建一个子工程service;
  2. 删除父工程的src目录,因为父工程只需要管理子工程,现在整个项目结构如下

(3)Maven Web工程

如今Java作为Web服务端开发语言的重要地位一直备受业界认可,那么Maven如何创建一个Web工程是JavaWeb开发的重要一步。

(2)中,我们已经得到了一个具有Maven父子工程结构的普通Java工程,下面我们要将ideademo01改造成一个符合JavaWeb开发的Web工程:

  1. 新建一个Maven工程startup备用作为启动工程

  1. startup改造成Web工程,选择对应工程

  1. 修改这两个web资源地址,修改路径如下,主要是将web修改为src\main\webapp,然后点击Apply

  1. 此时底部会出现一个警告标识,点击Create Artifact,或者自行去Artifacts选项下创建

  1. 最终工程结构如下

  1. 修改startup的pom文件,将其打包方式改为war,适用于tomcat部署;再将需要打包的工程引入进来。

  1. 到此为止,一个常用的web工程已经创建完毕,下面我们执行父工程Maven选项下的命令,就可以将所有工程编译打包。我们来验证一下:


二、执行Maven命令

  1. 在IDEA视窗的右侧找到Maven标签页,这里有一个Lifecycle就是我们所说的生命周期,双击对应命令就可以执行;
  2. 父工程执行会自动执行所有的子工程,子工程执行不影响父工程,但是如果依赖其他还未构建的工程,则可能出现编译报错(因为依赖工程还未编译,或本地仓库中还没有这个jar包);

  1. 也可以在上面点击 m 手动输入命令(如组合命令mvn clean install),回车执行,需要注意的是,默认是父工程,如果只要在子工程执行,要手动在输入框右侧切换下目标工程;

  1. 上面就是实践中常用的执行方式,在IDEA中其实只需要知道在哪里执行Maven命令,更重要的是明白其中的原理。如果想知道其他执行Maven命令方式,请查询 在IDEA中Maven执行的几种方式
  2. 当然,在实践中,我们常用的编译、测试和打包,通常会与持续集成(CI)和持续部署(CD)相结合
  1. DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
  2. DevOps 是一种软件开发实践,可促进开发与操作之间的协作,从而更快、更可靠地交付软件。DevOps 通常被称作一种文化,它将人员、流程和方法连接在一起来提供持续价值。
  3. CI代表持续集成(Continuous Integration),而CD代表持续部署(Continuous Deployment)或持续交付(Continuous Delivery)。持续集成强调开发人员提交新代码后,自动进行构建和测试,确保新代码与现有代码兼容。持续部署则是将通过测试的软件部署到生产环境,而持续交付则更进一步,确保软件可以随时部署到生产环境‌。
  4. DevOps是一种软件开发方法,旨在通过自动化和协作加速软件交付。它涉及开发团队和运维团队的紧密合作,通过自动化流程使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps的实现依赖于持续集成和持续部署等实践,从而提高了软件交付的速度和质量‌。
  5. 常用技术:Git、GitLab、Jenkins、docker、k8s……


三、其他信息

(1)在IDEA中,有几个地方可以执行Maven命令?

4个。

1、Maven选项卡(右侧),对应Maven工程下的Lifecycle下;

2、Maven选项卡(右侧),对应Maven工程下的Plugins下,点开对应插件下的目标;

3、Maven选项卡(右侧),菜单栏的m图标,点开后直接输入命令或命令组合,回车执行;

4、Project选项卡(左侧),队形工程下的pom.xml文件右击,选择Run Maven,选择命令。

(2)如果创建的工程没有生效,该怎么处理

一般是三个特殊状态的目录,新建Maven工程会自动配置好,分别是src\main\java对应Sourcessrc\main\resources对应Resourcessrc\test\java对应Tests

如果新建工程时没有上述3个目录没有状态,可能是Maven本地仓库未下载到对应插件、或者远程仓库存在连接问题

当然也可以自己手动创建,打开Project Structure> Modules,选中需要配置的工程,如下图:

(3)IDEA与Maven版本的问题

IDEA版本:IntelliJ IDEA 2021.1.1 (Ultimate Edition),Maven版本:3.8.5/3.9.9,执行Reload All Maven Projects导包报错:

而修改为Maven自带的Bundled版本3.6.3可以成功导入(后下载该版本也可以),所以可以根据Bundled来确定IDEA适配的Maven版本,当然也可以尝试升级到最新稳定版

java.lang.RuntimeException: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V not found
  at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)
  while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value=ide)
1 error
      role: org.apache.maven.model.validation.ModelValidator
  roleHint: ide
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.getComponent(Maven3XServerEmbedder.java:514)
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customizeComponents(Maven3XServerEmbedder.java:609)
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customize(Maven3XServerEmbedder.java:571)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
  at sun.rmi.transport.Transport$1.run(Transport.java:200)
  at sun.rmi.transport.Transport$1.run(Transport.java:197)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
  at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)
  at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:303)
  at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:279)
  at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)
  at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:217)
  at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:162)
  at com.sun.proxy.$Proxy200.customize(Unknown Source)
  at jdk.internal.reflect.GeneratedMethodAccessor792.invoke(Unknown Source)
  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.base/java.lang.reflect.Method.invoke(Method.java:566)
  at com.intellij.execution.rmi.RemoteUtil.invokeRemote(RemoteUtil.java:150)
  at com.intellij.execution.rmi.RemoteUtil.access$400(RemoteUtil.java:21)
  at com.intellij.execution.rmi.RemoteUtil$1.lambda$invoke$0(RemoteUtil.java:134)
  at com.intellij.openapi.util.ClassLoaderUtil.computeWithClassLoader(ClassLoaderUtil.java:31)
  at com.intellij.execution.rmi.RemoteUtil.executeWithClassLoader(RemoteUtil.java:202)
  at com.intellij.execution.rmi.RemoteUtil$1.invoke(RemoteUtil.java:134)
  at com.sun.proxy.$Proxy200.customize(Unknown Source)
  at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.doCustomize(MavenEmbedderWrapper.java:83)
  at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.onWrappeeCreated(MavenEmbedderWrapper.java:36)
  at org.jetbrains.idea.maven.server.RemoteObjectWrapper.getOrCreateWrappee(RemoteObjectWrapper.java:42)
  at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.doCustomize(MavenEmbedderWrapper.java:83)
  at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.lambda$customizeForResolve$1(MavenEmbedderWrapper.java:56)
  at org.jetbrains.idea.maven.server.RemoteObjectWrapper.perform(RemoteObjectWrapper.java:76)
  at org.jetbrains.idea.maven.server.MavenEmbedderWrapper.customizeForResolve(MavenEmbedderWrapper.java:55)
  at org.jetbrains.idea.maven.project.MavenProjectResolver.resolve(MavenProjectResolver.java:77)
  at org.jetbrains.idea.maven.project.MavenProjectsProcessorResolvingTask.perform(MavenProjectsProcessorResolvingTask.java:45)
  at org.jetbrains.idea.maven.project.MavenProjectsProcessor.doProcessPendingTasks(MavenProjectsProcessor.java:146)
  at org.jetbrains.idea.maven.project.MavenProjectsProcessor$1.run(MavenProjectsProcessor.java:115)
  at org.jetbrains.idea.maven.utils.MavenUtil.lambda$runInBackground$6(MavenUtil.java:536)
  at com.intellij.util.RunnableCallable.call(RunnableCallable.java:20)
  at com.intellij.util.RunnableCallable.call(RunnableCallable.java:11)
  at com.intellij.openapi.application.impl.ApplicationImpl$1.call(ApplicationImpl.java:265)
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
  at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
  at java.base/java.security.AccessController.doPrivileged(Native Method)
  at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
  at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.ComponentLookupException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V not found
  at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)
  while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value=ide)
1 error
      role: org.apache.maven.model.validation.ModelValidator
  roleHint: ide
  at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
  at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243)
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.getComponent(Maven3XServerEmbedder.java:511)
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customizeComponents(Maven3XServerEmbedder.java:609)
  at org.jetbrains.idea.maven.server.Maven3XServerEmbedder.customize(Maven3XServerEmbedder.java:571)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:498)
  at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
  at sun.rmi.transport.Transport$1.run(Transport.java:200)
  at sun.rmi.transport.Transport$1.run(Transport.java:197)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
  at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
  at java.security.AccessController.doPrivileged(Native Method)
  at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V not found
  at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(Unknown Source)
  while locating org.jetbrains.idea.maven.server.embedder.CustomModelValidator
  at ClassRealm[plexus.core, parent: null] (via modules: org.eclipse.sisu.wire.WireModule -> org.eclipse.sisu.plexus.PlexusBindingModule)
  while locating org.apache.maven.model.validation.ModelValidator annotated with @com.google.inject.name.Named(value=ide)
1 error
  at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:226)
  at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1053)
  at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:81)
  at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
  at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
  ... 21 more
Caused by: java.lang.NoSuchMethodError: org.apache.maven.model.validation.DefaultModelValidator: method <init>()V not found
  at org.jetbrains.idea.maven.server.embedder.CustomModelValidator.<init>(CustomModelValidator.java:36)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at com.google.inject.internal.DefaultConstructionProxyFactory$ReflectiveProxy.newInstance(DefaultConstructionProxyFactory.java:126)
  at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
  at com.google.inject.internal.ConstructorInjector.access$000(ConstructorInjector.java:32)
  at com.google.inject.internal.ConstructorInjector$1.call(ConstructorInjector.java:98)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:127)
  at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
  at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:93)
  at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306)
  at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
  at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
  at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
  at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:85)
  at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:57)
  at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:66)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:112)
  at org.eclipse.sisu.bean.BeanScheduler$CycleActivator.onProvision(BeanScheduler.java:230)
  at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:120)
  at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:66)
  at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
  at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:47)
  at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
  at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:168)
  at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:39)
  at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050)
  ... 24 more




下篇预告:《Maven学习笔记(三):Maven基础实践》

目录
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
2月前
|
Java 应用服务中间件 测试技术
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
Maven 是一款 Java 项目构建工具,主要用于管理 jar 包及其依赖关系。 本文主要了解Maven基础知识及基础应用,旨在为之后的进一步学习奠定基础。 内容上几近全为学习《尚硅谷2022版Maven教程》整理所得。 仅供参考。
240 80
Maven学习笔记(一):Maven基础(基于命令行的学习和应用)
|
5月前
|
Java 编译器 Maven
使用intellij idea搭建SSM架构的maven项目 详细
使用intellij idea搭建SSM架构的maven项目 详细
95 4
|
3月前
|
Java Maven 容器
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
使用IntelliJ IDEA的Artifacts功能,可以将项目依赖的第三方jar包打包进jar文件中,实现双击jar包即可直接运行。
Maven使用IDEA自带工具打包,同时将lib下的jar包打入,双击jar包可直接运行
|
3月前
|
前端开发 Java Maven
【前端学java】全网最详细的maven安装与IDEA集成教程!
【8月更文挑战第12天】全网最详细的maven安装与IDEA集成教程!
98 2
【前端学java】全网最详细的maven安装与IDEA集成教程!
|
3月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
3月前
|
Java 测试技术 Maven
Maven学习笔记
这篇文章是关于Maven的学习笔记,包括Maven简介、项目构建工具比较、Maven的四大属性(依赖管理、多模块构件、一致的项目结构、一致的构件模型和插件机制)、Maven的安装和配置、IDEA集成Maven环境,以及Maven项目创建、仓库概念、多模块项目构建、打包操作和依赖概念的详细介绍。
|
3月前
|
Java jenkins 持续交付
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
jenkins学习笔记之十七:使用插件及maven上传制品到nexus
|
4月前
|
Java Maven
idea安装并使用maven依赖分析插件:Maven Helper
idea安装并使用maven依赖分析插件:Maven Helper
2549 7
|
4月前
|
Java Maven
idea导入maven项目结构不全
idea导入maven项目结构不全
168 6

推荐镜像

更多