教学视频:
http://www.icoolxue.com/album/show/45/
1,编译,打包,发布
将pom.xml放在根目录下,将java放在src/main/java,将测试类放在src/main/test中:
即可运行mvn compile编译,运行mvn test执行编译+测试,编译和测试结果会放在target目录下。
运行mvn package执行编译+测试+打包,运行mvn clean清除target目录以便重新编译和测试。
通过mvn install可将模块jar包放入.m2中,其他模块可像依赖外部jar包一样依赖该模块。
通过mvn deploy可将jar包放入私服。
通过mvn archetype:generate 可帮你生成格式。
推荐文件格式:
src
main
java
package
resources //配置文件
test
java
package
resources
target //maven帮你编译后创建的,clean后会消失
classes
pom.xml
2,pom.xml 管理jar依赖
可通过gav(groupId, articleId, versionId)坐标,定义自己项目的坐标,groupId通常为项目名称,articleId通常为模块,versionId为模块。
版本进化-->0.0.1-SNAPSHOT-->0.0.1-Release。第一个数字表示架构调整,第二个数字表示分支,第三个表示小改动。
可通过<dependency>,在pom.xml中导入依赖jar包,添加的jar包也只需要声明gav即可,既可以是第三方gav,也可以是自己子项目的gav。
依赖的jar包会从中央仓库下载到个人目录下的.m2中,即个人本地仓库。
本地仓库路径可以在setting.xml中<localRepository>配置。
dependency中还有一个scope属性,默认为compile,可选值还有test,provided,runtime
compile指的是编译范围有效,编译和打包都会讲该依赖存储进去。
test指的是测试范围有效,编译和打包都不会使用该依赖。用的最多,专用来标注测试jar,如junit。
provided依赖是指编译和测试有效,但打包不会加入。如servlet-api.jar,由于服务器通常已经有了此包,再打入包中会冲突。
runtime指的是运行时有效,编译时无效。如数据库连接jar。
3,在Eclipse中使用maven
下载m2eclipse插件,配置本地maven地址和setting.xml
可通过模板创建maven项目,可通过run as -> maven build... ,输入命令并执行编译,测试,打包,安装等操作
4,依赖传递性
默认compile会传递,test scope不会传递。
1,同级别依赖,则依赖第一个,如:
A依赖log4j-1.2
B依赖log4j-1.5
C依次依赖A和B,则C依赖于第一个依赖(书写顺序)
2,不同级别依赖,则依赖级别最高的,如:
A依赖于dbunit-1.2, 而dbunit-1.2依赖于common-log-1.5,即A间接依赖common-log-1.5
B依赖于common-log-1.3
C依次依赖于A和B,但C依赖于common-log-1.3,因为级别最高。
3,如果有冲突,则使用<exclusion>去除某个模块的某个依赖
5,多模块pom.xml设置技巧
pom中有常量${project.groupId},${project.versionId}。多模块中这些变量都是相同,所以相互引用时,在输入其他模块的gav时,可使用常量。
多模块可定义一个parent,所有依赖的版本定义在parent上。其他模块继承parent,声明依赖即可。
6,搭建nexus私服
里面分hosted,proxy,group类型。
hosted中有SNAPSHOT,Release和3rd Party,其中前两个通过mvn deploy发布到私服,3rd Party可以通过上传的方式添加。
proxy一般都是maven的中央仓库。
group是指自定义。