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

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

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

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可以高效管理我们的项目。

(编辑:李大同)

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

    推荐文章
      热点阅读