目录
maven的安装不在这里讲了,网上教程一大堆。
需要注意的:
(1).安装完maven后建议更改本地仓库的位置,在conf->setting.xml中修改
<localRepository></localRepository>
(2).maven的默认远程仓库位置在lib目录下的maven-model-builder.jar的pom-4.0.0.xml中的
<repositories>
<repository>
<url>http://repo.maven.apacho.org/maven2</url>
</repository>
</repositories>
6月22日补充:这篇博客没有写如何具体创建maven父子工程,其实我本人也到网上看过很多创建父子工程的博客,大同小异但是有些许不同,观察比较细的同学会发现有些文章比如idea是先创建空项目还是先创建maven工程但是不选择骨架。比如eclipse子项目是创建maven project还是必须创建maven module。重点不在于你用哪种方式创建,重点是创建出来的项目要符合maven规范,如父项目package值为POM(哪怕你创建时候选错了都可以自行到pom.xml中手动改,甚至你可以手动创建项目的目录结构,目录结构你足够熟悉就好。)
1.maven常用命令:
- 打包:mvn package (打包后放入target中)
- 编译:mvn compile(会生成target目录,并把编译后的class放在classes中)
- 清空:mvn clean (清空target)
- 测试:mvn test (测试报告生成后存在target中,一般是三个文件)
- 安装: mvn install (将项目安装到本地仓库中)
- 发布: mvn deploy (发不到私服)
2.maven依赖
(1).依赖是具有传递性的.
(2).依赖传递原则:层级相同时按引入顺序传递,层级不同时按层级最短的传递
举个栗子:
A->B->C->X(1.0)
A->D->X(2.0)
由于只能引入一个版本的包,此时Maven按照最短路径选择导入x(2.0)
A->B->X(1.0)
A->D->X(2.0)
路径长度一致,则优先选择第一个,此时导入x(1.0)
还有resources也是可以传递的,当然resources中的文件不涉及层级问题,所以resources是按照dependency顺序引入的。当然如果本项目中能匹配到的话优先选择本项目中的。
(3).scope标签的值会影响依赖,这里暂时先不展开了.
(4).排除依赖可以用
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
3.聚合
建立一个简单项目artifactId为user-parent
<modules>
<module>../user-service</module>
<module>../user-core</module>
<module>../user-log</module>
</modules>
实现对三个项目的聚合,module标签中是其他项目的路径.这样所有项目都在通过操作父项目操作来实现了.
注意:modules的顺序是不重要的,因为maven会自动根据依赖关系来拓扑排序.
4.继承
子项目中添加:
<parent>
<groupId>cn.milo.user</groupId>
<artifactId>user-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 这里是要指到pom文件的 -->
<relativePath>../user-parent/pom.xml</relativePath>
</parent>
6月22日补充:这里讲一下relativePath标签,如果不写这个标签,子项目会默认在子项目pom.xml的父目录中查找pom.xml,没有找到的话会依次到本地仓库,远程仓库中找对应的父项目并找到对应的pom.xml.所以协同开发的话父项目要先deploy到私有仓库.私有仓库用法参照 : maven入门:nexus安装与使用(二)
父项目中添加依赖管理:
<!-- 依赖管理 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</dependencyManagement>
父项目中添加依赖管理:
如上配置后子项目添加父项目中的jar包就不需要写version标签了