mvn 命令

mvn clean install -Dmaven.test.skip

[INFO] ------------------------------------------------------------------------
[INFO] Building demo-base 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[WARNING] The artifact org.apache.commons:commons-io:jar:1.3.2 has been relocated to commons-io:commons-io:jar:1.3.2
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo-base ---
[INFO] Deleting /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo-base ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 15 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5:compile (default-compile) @ demo-base ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 43 source files to /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/target/classes
[INFO] /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java: /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java使用或覆盖了已过时的 API。
[INFO] /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
[INFO] /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java: /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java使用了未经检查或不安全的操作。
[INFO] /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/src/main/java/com/alibaba/xiude/base/template/generator/ServiceMapperGenerator.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
[INFO] 
[INFO] --- lombok-maven-plugin:1.16.8.0:delombok (default) @ demo-base ---
[WARNING] Skipping Delombok; no source to process.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ demo-base ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.5:testCompile (default-testCompile) @ demo-base ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ demo-base ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ demo-base ---
[INFO] Building jar: /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/target/MavenDemo.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ demo-base ---
[INFO] Installing /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/target/MavenDemo.jar to /Users/xiude/.m2/repository/com/alibaba/xiude/demo-base/1.0.0-SNAPSHOT/demo-base-1.0.0-SNAPSHOT.jar
[INFO] Installing /Users/xiude/IdeaProjects/spring-boot-demo-hb/demo-base/pom.xml to /Users/xiude/.m2/repository/com/alibaba/xiude/demo-base/1.0.0-SNAPSHOT/demo-base-1.0.0-SNAPSHOT.pom
[INFO]

执行顺序:

1、使用清理插件:maven-clean-plugin:2.5执行清理删除已有target目录;

2、使用资源插件:maven-resources-plugin:2.6执行资源文件的处理;

3、使用编译插件:maven-compiler-plugin:3.5编译所有源文件生成class文件至target\classes目录下;

4、使用资源插件:maven-resources-plugin:2.6执行测试资源文件的处理;

5、使用编译插件:maven-compiler-plugin:3.5编译测试目录下的所有源代码;

6、使用插件:maven-surefire-plugin:2.12.4 运行测试用例;

7、使用插件:maven-jar-plugin:2.4对编译后生成的文件进行打包,包名称默认为:artifactId-version,比如本例生成的jar文件:demo-base-1.0.0-SNAPSHOT,包文件保存在target目录下;

8、使用maven-install-plugin:2.4把上述打包生成的jar包和pom文件安装到本地的仓库中

注意:步骤 4 5 6 在mvn clean install时才起作用

mvn package

package是把jar打到本项目的target下,和mvn clean install 相似,但省略了步骤8,install时把target下的jar安装到本地仓库,供其他项目使用。

mvn idea:idea

自动生成idea项目工程,包含执行project, module, and workspace三个goals

maven scope

scope=compile,什么都不填默认是compile,该范围的依赖传递最强,编译,打包,运行都需要。打包的时候通常需要包含进去。

scope=provided,依赖不会传递,生成war或者jar包时不会导入。仅编译,测试时有用。例如servlet-api,容器已经提供了,就不能再包含了,否则,会导致包冲突等异常。例如在demo-base中把aspectjweaver设置成provided,那么其他应用使用demo-base-1.0.0-SNAPSHOT时就不会自动引入aspectjweaver这个jar。

<dependency>
   <groupId>aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <scope>provided</scope>
</dependency>

scope=runtime,编译时没有依赖,运行时有依赖

scope=test,依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit

scope=system,从本地仓库中导入jar,不是远程仓库。

mvn 对jar的加载

mvn选择加载jar的顺序:

1、优先按照<dependencyManagement>下指定的版本进行选择;

2、若无版本声明,则maven选择依赖树中的最短路径的那个包;

3、若路径长度一致,则按照最先声明的原则进行加载;

如图所示,如果在pom.xml中显示定义5.0.1,那么mvn 会选择该版本

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.1</version>
</dependency>

如果没有显示定义,从demo-base到5.0.4 路径=2,到5.0.1路径=1,会优先选择5.0.1(最短路径),如果定义了如下,则加载5.0.1(最先声明的原则)

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.1</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.0.4</version>
</dependency>

Jar包加载顺序

 Jar包所处的加载路径,本质是加载该Jar包的类加载器在加载器树结构所处的层级结构。JVM类加载器采取双亲委派机制,层级越高的类加载器越优先加载其加载路径下的类。加载顺序:启动类加载器>扩展类加载器>系统类加载器(应用加载器)。假设两个包名和类名完全相同的class文件不在同一个jar包,如果一个class文件已经被加载java虚拟机里了,那么后面的相同的class文件就不会被加载了。

文件系统的文件加载顺序。因Tomcat等容器的Classloader获取加载路径返回顺序的文件列表时是不排序的,依赖于系统的文件系统的返回顺序。对于Linux系统,是依赖iNode的顺序来决定的。所以有可能出现日常、预发、线上不同机器之间运行结果不同的问题。

猜你喜欢

转载自my.oschina.net/u/2302503/blog/1805834