https://juejin.im/post/6844904049871962126#heading-0
dependencyManagement
在Maven多模块的时候,管理依赖关系是非常重要的,各种依赖包冲突,查询问题起来非常复杂,于是就用到了
示例说明,
在父模块中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
</dependencyManagement>
那么在子模块中只需要
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
使用dependencyManagement可以统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,不用每个模块项目都弄一个版本号,不利于管理,当需要变更版本号的时候只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个特殊的版本号时,只需要在自己的模块dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。
与dependencies区别:
1)Dependencies相对于dependencyManagement,所有生命在dependencies里的依赖都会自动引入,并默认被所有的子项目继承。
2)dependencyManagement里只是声明依赖,并不自动实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
install/package/deploy
mvn clean package依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7个阶段。
mvn clean install依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8个阶段。
mvn clean deploy依次执行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9个阶段。
由上面的分析可知主要区别如下,
package命令完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
install命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库
deploy命令完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
打包时Skip Tests
在Maven Projects界面中可以看到如下几个按钮。其中红框中的按钮叫Toggle ‘Skip Tests’ Mode。就是跳过测试Skip Tests的按钮。图中的状态是选中状态,该状态下已经能够跳过测试了。再点击一下就能恢复到未选中的状态即不跳过测试。
打包顺序
依赖关系对安装顺序的要求
A 依赖 B:Maven 要求先安装 B,再安装 A
继承关系对安装顺序的要求
A(子工程)继承 B(父工程):Maven 要求先安装 B,再安装 A
如果配置聚合,那么对聚合工程执行 install 命令,Maven 就会自动按照正确的顺序安装各个模块工程。
maven打包字符集
解决maven打包编译出现File encoding has not been set问题
maven打包编译时后台一直输出警告信息
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
在pom.xml文件中增加一个配置项即可
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>