加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【maven总结】(1) 坐标与依赖

发布时间:2020-12-14 05:09:12 所属栏目:百科 来源:网络整理
导读:? ? ? ? ? ?maven可以管理项目的依赖,如何找到jar的具体位置,唯一的标识就是坐标。开发过程中需要导入项目所依赖的jar,多个项目之间依赖的管理也有原则。 1.坐标的概念 groupIdorg.sonatype.nexus/groupIdartifactIdnexus-indexer/artifactIdversion2.0.0

? ? ?

? ? ?maven可以管理项目的依赖,如何找到jar的具体位置,唯一的标识就是坐标。开发过程中需要导入项目所依赖的jar,多个项目之间依赖的管理也有原则。




1.坐标的概念


<groupId>org.sonatype.nexus</groupId>
<artifactId>nexus-indexer</artifactId>
<version>2.0.0</version>
<packaging>jar</packaging>


? ? ? ?maven 的所有构件均通过坐标进行组织和管理。maven 的坐标通过 5 个元素进行定义,其中 groupId、artifactId、version 是必须的,packaging 是可选的(默认为jar),classifier 是不能直接定义的。

groupId:定义当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一一对应。


artifactId:定义当前 Maven 项目的一个模块,默认情况下,Maven 生成的构件,其文件名会以 artifactId 开头,如 hibernate-core-3.6.5.Final.jar。


version:定义项目版本。


packaging:定义项目打包方式,如 jar,war,pom,zip ……,默认为 jar。


classifier:定义项目的附属构件,如 hibernate-core-3.6.6.Final-sources.jar,hibernate-core-3.6.6.Final-javadoc.jar,其中 sources 和 javadoc 就是这两个附属构件的 classifier。classifier 不能直接定义,通常由附加的插件帮助生成。


2.依赖


? ? 2.1.范围


? ? compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围

? ? test:测试依赖范围。只对测试classpath有效

? ? provided:已提供依赖范围。对于编译和测试classpath有效

? ? runtime:运行时依赖范围。对于测试和运行有效

? ? system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。

? ? import:导入依赖范围。

? ??

? ? 2.2传递性依赖

? ? 如果A->B->C,即A对于B的依赖范围是compile,B对于C的依赖范围是compile,那么A对于C的依赖范围是compile。此时,我们称A对于B是第一直接依赖,B对于C是第二直接依赖(根据情况的不同可能会有第三、第四……直接依赖),A对于C是传递性依赖。



? ? 2.3 依赖调解

? ? ?1.路径最近者优先

? ? ?2.最先声明者优先


? ? 2.4 可选依赖

? ?可选依赖,依赖将不会得以传递。?<optional>true</optional>


? ? 2.5 排除依赖

? ? 不想引入的依赖,使用代码中用exclusions元素可以包含多个exclusion子元素。

? ??

? ? 2.6 版本统一管理

? ? <properties>
? ? ? ? <springframework.version>3.1.2.RELEASE</springframework.version>
? ? </properties>



3.总结


? ? pom是可以继承的,通常对于一个大型的项目或是多个module的情况,子模块的pom需要指定父模块的pom。利用maven可以高效管理我们的项目。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读