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
-fae —fail-at-end 最后失败模式:Maven会在构建最后失败(停止)。如果Maven refactor中一个失败了,Maven会继续构建其它项目,并在构建最后报告失败。
-ff —fail-fast 最快失败模式: 多模块构建时,遇到第一个失败的构建时停止。
-fn —fail-never 从不失败模式:Maven从来不会为一个失败停止,也不会报告失败。
-gs —global-settings
-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
-pl —projects
-q —quiet 安静模式,只输出ERROR
-rf —resume-from
-s —settings
-T —threads
-t —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
依赖原则
依赖原则目的:防止jar包的冲突
为了避免造成依赖重复,需要选择一个依赖路径
路径最短优先原则
路径长度相同
路径长度相同的情况下,又可以分为是否有在同一个pom.xml两种情况
- 覆盖
如果在同一pom.xml文件中有2个相同的依赖;后面声明的会覆盖前面的依赖
但这里要说严禁使用本情况,严禁在同一个pom中声明两个不同的依赖 - 优先
如果是在不同pom.xml中有2个相同的依赖;则先声明的依赖,会覆盖后面声明的依赖
当 A.jar 依赖于 B.jar,而B.jar 依赖于 C.jar,正常情况下 A 也是会依赖到 C 的,但是如果 B 有一些问题的话会导致依赖没法正常传递。可以通过以下命令来查看具体情况。
mvn -X dependency:tree>tree.txt
常见的无法传递依赖的情况有:
- 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 中添加
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><fork>true</fork><!--指定你的jdk地址--><executable>D:\Program Files\Java\jdk1.8.0_162\bin\javac.exe</executable></configuration></plugin>
