1.坐标详解:
Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标通过一些元素定义的。如:groupId,artifactId,version,packaging,classifier等。
例子:
<groupId>org.sonatype.nexus</groupId> // 定义Maven项目隶属的是实际项目
<artifactId>nexus-indexer</artifactId> //实际项目中的一个模块
<version>jar</version> //当前的版本
<packaging></packaging> //该元素定义Maven项目的打包方式。首先打包方式通常与所生构件的文件扩展名对应。如上面实例中的packing为jar,最终的文件是:nexus-indexer-2.0.0.jar
2.依赖范围:
test: 测试依赖范围;只对测试的classpath有效。例子:Junit
3.依赖传递
依赖调度:项目A依赖关系:A->B->C->X(1,0),A->D->X(2,0);X是A的依赖传递,但是俩条依赖路径上有俩个版本的X;Maven如何解析:Maven依赖调度的第一个原则是:
路径最近者优先;
当俩个路径都为一样的时候,就采用Maven第二个原则:第一声明者优先;如:A->B->C->X(1,A->D->E->X(2,0);俩个路径都是2;那么会解析第一个,x(1,0);
4.可选依赖
假设有这一个依赖关系:项目A依赖于项目B,项目B依赖于项目X和Y,B对X和Y的依赖都是可选依赖;A->B、B->X(可选)、B-Y(可选)如果所有者三个依赖的范围都是compile,那么X,Y就是A的compile范围传递性依赖。由于这里X,Y是可选依赖,依赖将不会传递,即:X,Y将不会对A有任何影响:
最佳实战:(Maven依赖常见的技巧)
1.排除依赖
传递性依赖,会给项目隐士的引入很多依赖,极大简化项目依赖的管理,但是会带来麻烦
项目A依赖与项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显示地声明地声明对于项目C1.1.0版本依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个和多个exclusion子元素。exclusion只需要groupId 和 artifactId。
2.归类依赖:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。