`
290434409
  • 浏览: 27212 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven学习笔记之Maven坐标依赖

阅读更多

Maven学习笔记之Maven坐标依赖

 

何为maven坐标?

 

Maven坐标:世界上任何一个构件都可以用maven坐标唯一标识,maven的坐标元素包括:groupId, artifactId, version, packaging, classifier

 

maven坐标详解

 

1) groupId:定义当前maven项目隶属的实际项目,通常与域名反向一一对应;

2) artifactId:定义实际项目中的一个maven项目(模块),推荐使用实际项目作为前缀

3) version:定义maven项目当前所处版本(参见maven版本规范);

4) packaging:maven项目的打包方式,如jar、war,通常与生成的文件扩展名一致,并且会影响到maven项目构建的生命周期;

5) classifier:帮助定义输出的一些附属构件,如:spring-core-4.1.5.relase-sources.jar,此处,sources代表是一个源码包,常见的还有javadoc。生成附属构件时需要一些插件的帮助。

 

maven依赖的配置

 

在pom.xml的根元素project下的dependencies可以包含多个dependency元素,通过dependency声明项目的依赖,每个依赖(dependency)包含的元素有:

1) groupId, artifactId, version:依赖的基本坐标;

2) type:依赖的类型,对应项目定义的packaging,默认值为jar;

3) scope:依赖的范围;

4) optional:标记依赖是否可选(一般不建议使用),比如一个项目即提供了oracle的实现,又提供了mysql的实现,而用户在使用的时候只能选择oracle或者mysql中的一个,此时,对于ojdbc的依赖和mysql-connector-bin的依赖就属于可选依赖;

5) exclusions:排除传递性依赖。

 

依赖的范围(scope)

 

1) compile:编译依赖范围,scope默认值;编译、测试、运行的时候都会使用此依赖

2) test:测试的依赖范围,maven测试的时候需要此依赖;

3) provided:已提供依赖范围,编译、测试有效,运行时不在引入此依赖,典型的例子是servlet-api,运行项目的时候tomcat等容器已提供;

4) runtime:运行时依赖范围,运行和测试的时候需要,在编译的时候并不需要,典型的例子:jdbc的驱动实现

5) system:系统的依赖范围,与provider的依赖范围一致,区别是必须通过systemPath制定本地包的路径,此依赖不会通过maven仓库解析,如:

 

<dependency>

   <groupId>com.alleyz.demo</groupId>

   <artifactId>demo-http</artifactId>

   <version>1.0</version>

   <scope>system</scope>

   <systemPath>${project.basedir}/src/lib/jave-1.2.jar</systemPath>

   <systemPath>${project.basedir}/src/lib/jave-1.2.jar</systemPath>

</dependency>

 

 

6)import:导入依赖范围。

 

传递性依赖

以一个使用了Spring的项目demo举个例子:

Demo项目依赖于spring-core,而spring-core项目有依赖于commons-logging,此时,就形成了传递性依赖,demo对于对于spring-core是第一直接依赖,spring-core对于commons-logging是第二直接依赖,demo对于commons-logging是传递性依赖,第一直接依赖范围和第二直接依赖范围决定了传递性依赖的范围,如图:



 

  

依赖调节

 

第一原则:路径最近者优先;

第二原则:第一声明者优先。

 

根据maven的传递性依赖机制,大部分情况下我们只需要关注项目的直接依赖。但是项目中出现依赖问题时,我们得知道maven传递性依赖选择的到底是哪个,下面例子:

 

项目A存在依赖关系:

1) A依赖B,B依赖C,C依赖X的1.0版本;

2) A依赖D,D依赖X的2.0版本,D依赖M的1.0版本;

3) A依赖E,E依赖于M的2.0版本;

 

此时,X作为项目A的传递依赖,根据依赖调节的第一原则,引入X的2.0版本;M作为项目A的传递依赖,引入的版本根据D和E的声明先后顺序决定(pom.xml文件中的先后顺序)。

 

归类依赖

 

对于同产品的不同依赖进行归类,保证其版本的一致性,一般使用maven属性进行归类依赖,如:

 

<properties>
<spring>4.2.5.RELEASE</spring>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring}</version>
</dependency>
</dependencies>

 

 

优化依赖

优化规律:

显示声明项目中直接用到的依赖

分析办法:

运行 mvn dependency:analyze

查看Used undeclared dependencies下如果有依赖(直接依赖),则应该将此依赖在pom中声明,

查看Used declared dependencies下如果有依赖(显式声明但未在主代码中用到),则应该在确定无其他直接依赖使用此依赖时删除。

 

参考资料:《maven实战》

  • 大小: 23.4 KB
1
2
分享到:
评论
2 楼 wolfhml 2016-04-22  
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
1 楼 string2020 2016-04-22  
http://blog.csdn.net/mn960mn/article/category/2300763

相关推荐

    Maven学习笔记.zip

    **Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。Maven通过使用一个项目对象模型(Project Object Model,POM),XML格式的配置文件,定义了...

    maven学习笔记01(基础入门)

    ** Maven基础入门 ** Maven是一个Java项目管理工具,它主要负责构建、依赖管理和项目信息管理。...在`maven_study_01`的学习笔记中,你可以找到更多关于Maven的基础知识和实践案例,帮助你快速上手并掌握这一工具。

    maven学习笔记

    **Maven学习笔记** 在Java开发领域,Maven是一个不可或缺的构建工具,它极大地简化了项目的构建、管理和依赖管理过程。Maven通过一个统一的项目对象模型(Project Object Model,POM),使得开发者可以轻松地定义...

    maven学习笔记.rar

    ** Maven学习笔记详解 ** Maven,作为Java项目管理和构建工具,是开发人员不可或缺的利器。它通过使用一种标准化的项目对象模型(Project Object Model,POM)来管理项目的依赖关系,构建过程以及配置信息。Maven...

    个人Maven学习笔记

    ### 个人Maven学习笔记 #### 为什么使用Maven? 在软件开发过程中,尤其是在使用Java进行后端开发时,项目通常会依赖大量的第三方库或框架。如果没有统一的管理工具,这些依赖很容易出现版本冲突的问题,增加了...

    Maven 学习笔记.docx

    【Maven学习笔记】 Maven是一个强大的项目管理和构建工具,主要应用于Java开发领域。它能够自动管理项目的依赖关系,帮助开发者解决因jar包版本冲突、依赖管理混乱等问题带来的困扰。Maven通过制定一套规范化的项目...

    Maven学习笔记

    **Maven学习笔记** Maven是一个强大的Java项目管理和构建工具,它简化了项目的构建、依赖管理和文档生成。本文档基于尚硅谷的视频教程,旨在帮助读者深入理解Maven的核心概念和使用方法。 **1. 为什么学习Maven** ...

    Maven学习笔记大全.docx

    **Maven学习笔记大全** Maven是一个强大的Java项目管理工具,它通过项目对象模型(Project Object Model,简称POM)来管理和构建项目。POM是一个XML文件,包含了项目的配置信息,如依赖、构建过程和插件设置。Maven...

    Maven笔记与资料.zip

    Maven通过坐标(groupId、artifactId、version)来唯一标识每个JAR包,实现依赖管理。当在POM中声明了依赖,Maven会自动从远程仓库下载这些依赖及其依赖的依赖,避免版本冲突。Maven还支持排除依赖、范围(如编译、...

    maven 入门笔记配套示例代码

    5. **坐标**:在Maven中,每个项目都有唯一的坐标,由groupId、artifactId和version组成。例如,`com.example:my-app:1.0.0`,其中`com.example`是groupId,`my-app`是artifactId,`1.0.0`是version。 6. **模块化...

    maven笔记+教案

    提供的"Maven教案.docx"文档可能包含详细的Maven教程,涵盖了Maven的基本概念、使用方法、配置技巧以及解决常见问题等内容,适合初学者和进阶者参考学习。通过深入阅读这份教案,读者可以全面了解和掌握Maven的各个...

    Maven开发者笔记

    3. **Maven坐标**:每个Maven项目都有唯一的坐标,由groupId、artifactId和version组成,这使得在项目中引用其他依赖变得简单且可预测。 4. **插件与目标**:Maven通过插件系统实现各种构建任务,如编译、测试、...

    maven.chm

    书中还详细讲解了Maven的坐标系统,这是识别项目和其依赖的关键。坐标由groupId、artifactId和version三部分组成,它们分别代表组织或公司名、项目名和版本号。通过这些坐标,Maven可以精确地定位到项目及其依赖。 ...

    Maven3实战笔记.pdf

    标题中提及的“Maven3实战笔记”指向了Maven这款流行的Java项目管理和自动化构建工具的第三个主要版本。Maven自从引入以来,就极大地简化了Java项目的构建过程,提高了项目构建的标准化程度。它使用项目对象模型...

Global site tag (gtag.js) - Google Analytics