maven 参数

maven 的参数详解

缩写 全名 说明
-h —help 显示帮助信息
-am —also-make 构建指定模块,同时构建指定模块依赖的其他模块
-amd —also-make-dependents 构建指定模块,同时构建依赖于指定模块的其他模块
-B —batch-mode 以批处理(batch)模式运行
-C —strict-checksums 检查不通过,则构建失败;(严格检查)
-c —lax-checksums 检查不通过,则警告;(宽松检查)
-D —define 定义系统变量
-e —errors 显示详细错误信息
-emp —encrypt-master-password 加密主安全密码,用于用户访问管理等
-ep —encrypt-password 加密服务器密码
-f —file 使用指定的POM文件替换当前POM文件
-fae —fail-at-end 最后失败模式:Maven会在构建最后失败(停止)。如果Maven refactor中一个失败了,Maven会继续构建其它项目,并在构建最后报告失败。
-ff —fail-fast 最快失败模式: 多模块构建时,遇到第一个失败的构建时停止。
-fn —fail-never 从不失败模式:Maven从来不会为一个失败停止,也不会报告失败。
-gs —global-settings 替换全局级别settings.xml文件
-l —log-file 指定输出日志文件
-N —non-recursive 仅构建当前模块,而不构建子模块(即关闭Reactor功能)
-nsu —no-snapshot-updates 强制不更新SNAPSHOT
-U —update-snapshots 强制更新releases、snapshots类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)
-o —offline 运行offline模式,不联网进行依赖更新
-P —activate-profiles 激活指定的profile文件列表(用逗号[,]隔开)
-pl —projects 手动选择需要构建的项目,项目间以逗号分隔
-q —quiet 安静模式,只输出ERROR
-rf —resume-from 从指定的项目(或模块)开始继续构建
-s —settings 替换用户级别settings.xml文件
-T —threads 线程计数,例如2.0c,其中c是核心数,两者相乘即为总线程数
-t —toolchains 指定用户的toolchains文件路径
-V —show-version 显示版本信息而不停止构建
-v —version 显示版本信息
-X —debug Debug模式,输出详细日志信息

maven 依赖传递

当存在传递依赖的情况时,主工程对间接依赖的jar可以访问吗?
例如:A.jar依赖于B.jar,而B.jar依赖于C.jar,那么要怎么修改配置文件,才会让A.jar 也依赖 C.jar 呢?
这要看传递依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问
即 要使A.jar 依赖于C.jar 当且仅当C.jar的范围是compile
image.png

依赖原则

依赖原则目的:防止jar包的冲突
为了避免造成依赖重复,需要选择一个依赖路径

路径最短优先原则

即优先选择传递路径最短的依赖包

路径长度相同

路径长度相同的情况下,又可以分为是否有在同一个pom.xml两种情况

  1. 覆盖
    如果在同一pom.xml文件中有2个相同的依赖;后面声明的会覆盖前面的依赖
    但这里要说严禁使用本情况,严禁在同一个pom中声明两个不同的依赖
  2. 优先
    如果是在不同pom.xml中有2个相同的依赖;则先声明的依赖,会覆盖后面声明的依赖

当 A.jar 依赖于 B.jar,而B.jar 依赖于 C.jar,正常情况下 A 也是会依赖到 C 的,但是如果 B 有一些问题的话会导致依赖没法正常传递。可以通过以下命令来查看具体情况。

  1. mvn -X dependency:tree>tree.txt

常见的无法传递依赖的情况有:

  1. B pom 里使用了 system scope 的依赖,并且使用了类似 ${basedir} 的路径。

No compiler is provided in this environment.

在使用 maven 打包的时候碰到了这个错误:

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

解决办法:在 pom.xml 中的 build plugins 中添加

  1. <plugin>
  2. <groupId>org.apache.maven.plugins</groupId>
  3. <artifactId>maven-compiler-plugin</artifactId>
  4. <configuration>
  5. <fork>true</fork>
  6. <!--指定你的jdk地址-->
  7. <executable>
  8. D:\Program Files\Java\jdk1.8.0_162\bin\javac.exe
  9. </executable>
  10. </configuration>
  11. </plugin>