`
sha.tians
  • 浏览: 14148 次
社区版块
存档分类
最新评论

[Maven]坐标与依赖

 
阅读更多

        本篇内容为根据徐晓斌版《Maven实战》整理而成的学习笔记。

        在Maven世界中,任何一个依赖、插件或者项目构建的输出,都可以称为构件,构件的逻辑表示方式是:坐标和依赖,构件的物理表示方式是:文件。本篇主要简述坐标和依赖。

 

Maven坐标

    Maven规定了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。
    groupId:Maven项目隶属的实际项目,命名方式通常与域名反向一一对应。必须定义。
    artifactId:实际项目中的一个Maven项目(模块),推荐使用实际项目名称作为artifactId的前缀。必须定义。
    version:Maven项目当前所处的版本。必须定义。
    packaging:Maven项目的打包方式,打包方式通常与所生成构件的文件扩展名对应。当没有定义时,Maven会使用默认值jar。
    classifier:帮助定义构件输出的一些附属附件。注意,不能直接定义项目的classifier,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。
 

Maven依赖

1. 依赖的配置
    根元素project下的dependencies可以包含一个或多个dependency元素,以声明一个或多个依赖。每个依赖可以包含的元素有:
groupId、artifactId和version:依赖的基本坐标。
type:依赖的类型,对应于项目定义的packaging,大部分情况下不需要定义,使用默认值jar。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusions:用来排除传递性依赖。
2. 依赖的范围
依赖范围(scope) 对于编译classpath有效 对于测试classpath有效 对于运行时classpath有效
编译依赖范围:compile Y Y Y
测试依赖范围:test - Y -
已提供依赖范围:provided Y Y -
运行时依赖范围:runtime - Y Y
系统依赖范围:system Y Y -
另外还有导入依赖范围:import,该范围不会对三种classpath产生实际的影响。
3. 传递性依赖
    当A有一个compile范围的B依赖,B有一个compile范围的C依赖,那么C就会成为A的compile范围依赖,C是A的一个传递性依赖。
    有了传递性依赖的机制,在使用某个依赖时就不需要考虑它依赖了什么,也不需要担心引入多余的依赖。Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
    需要注意的是,可选依赖不会被传递。
4. 依赖范围影响传递性依赖
  compile test provided runtime
compile compile - - runtime
test test - - test
provided provided - provided provided
runtime runtime - - runtime
5. 依赖调解
    当两个依赖路径上有两个版本的依赖X时,有以下两个依赖调解原则:
第一原则:路径最近者优先;
第二原则:路径长度一样时,第一声明者优先。
6. 排除依赖
    当项目A依赖于项目B,但是不想引入传递性依赖C,而是自己显示的声明对项目C另一个版本的依赖,使用exclusions元素声明排除性依赖。
    exclusions可以包含一个或者多个exclusion子元素,声明exclusion时只需要groupId和artifactId,不需要version元素。
7. 归类依赖
    当项目中依赖了同一项目的不同模块,它们的版本都是相同的,因此在升级的时候,这些依赖的版本会一起升级。为了避免重复,且需要修改时只修改一处,可以通过归类依赖来解决。
    使用properties元素定义Maven属性,如springframework.version子元素,并定义其值。有了这个属性定义,maven运行时会将POM中所有的${springframwork.version}替换成定义的实际值。
8. 优化依赖
使用dependency:list和dependency:tree 帮助我们详细了解项目中所有依赖的具体信息。
使用dependency:analyze工具可以帮助分析当前项目的依赖。
analyze的结果中包含了两部分:
Used undeclared dependencies:项目中使用但未显式声明的依赖。这种依赖意味着潜在的风险;
Unused declared dependencise:项目中未使用的,但显式声明的依赖。对于这种依赖不能直接删除,因为analyze只会分析编译和测试需要的依赖,其他依赖它无法发现,因此需要仔细分析。

 

 

分享到:
评论

相关推荐

    Maven介绍安装配置坐标依赖等等

    Maven简介,maven与ant比较,windows下安装配置,坐标依赖,仓库,部署第三方构建

    深入理解Maven的坐标与依赖

    主要介绍了深入理解Maven的坐标与依赖,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Maven: 仓库搜索服务

    如何输入关键字,寻找需要依赖jar的MAVEN坐标,需要提供确切的MAVEN坐标 1.Sonatype Nexus 地址: https://repository.sonatype.org 2. Jarvana 地址: http://www.jarvana.com/jarvana 3.MVNbrowser 地址: ...

    三. 坐标和依赖

    NULL 博文链接:https://sgq0085.iteye.com/blog/1860636

    jacob-1.18.jar/dll maven

    jacob-1.18的资源包还有 jacob-1.18-x64.dll和jacob-1.18-x86.dll. 把对应的windows版本扔到 C...如果使用maven 则在pom.xml中添加 <groupId>com.hynnet</groupId> <artifactId>jacob <version>1.18 </dependency>

    Maven入门巨无霸视频教程(2.24G)

    使用Maven核心概念介绍(坐标、依赖、仓库、插件、...任亮系列-maven坐标.mp41010.任亮系列-maven依赖介绍.mp41111.任亮系列-maven依赖范围.mp41212.任亮系列-maven依赖传递和可选依赖和排除依赖.mp41313.任亮系列-mav

    Maven原理和实践-培训课件.ppt

    何为Maven 构建,依赖管理,项目信息聚合 Maven核心概念 坐标,依赖,仓库,生命周期,插件 Maven最佳实践 创建、打包、发布、版本管理 项目实战 Nexus(Todo…) M2eclipse(Todo…)

    common-lang-3.1.1-API文档-中文版.zip

    Maven坐标:com.twelvemonkeys.common:common-lang:3.1.1; 标签:twelvemonkeys、common、lang、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    maven课程讲义.doc

    POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。。 2、依赖管理系统(基础核心 ) maven通过坐标对项目工程所依赖的jar包统一规范管理。 3、maven定义...

    springfox-oas-3.0.0-API文档-中英对照版.zip

    Maven坐标:io.springfox:springfox-oas:3.0.0; 标签:oas、springfox、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    maven 构建好的 IK 分词器,可直接使用

    用于 Elasticsearch 2.2 的 中文分词器,已构建好,直接放入 Elasticsearch 的plugins 目录下使用

    jna-platform-4.3.0-API文档-中英对照版.zip

    Maven坐标:net.java.dev.jna:jna-platform:4.3.0; 标签:java、jna、platform、中英对照文档、jar包; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...

    flink-connector-jdbc-2.12-1.14.3-API文档-中英对照版.zip

    Maven坐标:org.apache.flink:flink-connector-jdbc_2.12:1.14.3; 标签:apache、flink、connector、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档...

    commons-net-3.3-API文档-中英对照版.zip

    Maven坐标:commons-net:commons-net:3.3; 标签:commons、net、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...

    spring-messaging-4.3.12.RELEASE-API文档-中英对照版.zip

    Maven坐标:org.springframework:spring-messaging:4.3.12.RELEASE; 标签:springframework、spring、messaging、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,...

    maven window下安装包

    第5章:坐标和依赖/5.9 最佳实践/5.9.2 依赖属性使用变量 第5章:坐标和依赖/5.9 最佳实践/5.9.3 依赖关系查看 第6章:仓库/6.1 何为Maven仓库 第6章:仓库/6.2 仓库的布局 第6章:仓库/6.3 仓库的分类 第6章:仓库/...

    commons-beanutils-1.7.0-API文档-中英对照版.zip

    Maven坐标:commons-beanutils:commons-beanutils:1.7.0; 标签:beanutils、commons、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 ...

    jsonassert-1.5.0-API文档-中英对照版.zip

    Maven坐标:org.skyscreamer:jsonassert:1.5.0; 标签:skyscreamer、jsonassert、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化...

    jaxrpc-maven-开源

    用于调用JAX-RPC wscompile工具的Maven插件。 移至https://github.com/anomen-s/maven-jaxrpc-plugin

    maven3教程(私塾在线)视频配套学习资料

    3、maven坐标 4、maven命令:重点理解【生命周期和阶段】和【插件和目标】 5、在eclipse中通过m2eclipse插件使用maven 6、配置和使用私服 7、实战maven,把以前一个不是用maven做的模块,移植为maven项目 这是...

Global site tag (gtag.js) - Google Analytics