《maven实战》读书笔记(二)——坐标与依赖
发布时间:2020-12-13 19:41:44 所属栏目:百科 来源:网络整理
导读:坐标是maven的核心概念之一,另外几个核心概念是依赖、仓库、生命周期、插件 本文总结一下坐标和依赖的几个要点 “坐标”是maven引入项目构建的概念,此前ant是没有这个概念的。maven将jar包、项目的构建成品等,都统一看做是“构件”,而坐标就是构件的唯一
坐标是maven的核心概念之一,另外几个核心概念是依赖、仓库、生命周期、插件
本文总结一下坐标和依赖的几个要点 “坐标”是maven引入项目构建的概念,此前ant是没有这个概念的。maven将jar包、项目的构建成品等,都统一看做是“构件”,而坐标就是构件的唯一标识。通过坐标,maven就能找到任何一个构件,并且管理依赖关系 坐标由以下元素组成:groupId、artifactId、version、packaging、classifier groupId,是当前maven项目隶属的实际项目。而不仅仅是到组织层面,因为一个组织往往会有多个实际项目,如果groupId仅仅指向组织,那就无法标识实际项目的模块了。实际项目和maven项目,是一个“一对多”的关系 比如说,我们接下来要做的任务管理重构项目,准备基于maven构建,那这个项目的groupId就应该是com.huawei.wfm.task artifactId,即当前的maven项目,可以视为实际项目的一个模块,推荐的做法,是用实际项目名称,作为artifact的前缀 比如说,接下来这个任务子系统,有一个模块是流程引擎,那么这个maven项目的aftifactId就应该是task-process version,就很好理解了,是项目的版本号 packaging,是项目的打包方式,常见的有jar、war等 classifier,是用来帮助定义构建输出的一些附属构建,如javadoc、source等,需要依赖插件,不能直接定义 下面说说“依赖”的一些要点: 1、首先需要知道,maven构建项目的时候,会有3套classpath。编译项目主代码的classpath、编译和执行测试代码的classpath、实际运行时的classpath 2、依赖范围,和上面说的第一点密切相关 maven有以下几种依赖范围,包括compile、test、provided、runtime、system、import 如果在pom中没有特别声明scope的话,默认是compile的依赖范围 3、依赖传递 这个很好理解,比如项目依赖了spring-framework,而spring-framework又是依赖common-logging的,那么项目也就依赖common-logging 要注意的是,依赖传递的概念,需要和上面说的依赖范围一起理解 另一个问题是,在实践中,有时候需要排除传递性依赖。比如说项目A依赖项目B,而项目B依赖项目C的1.0版本。但是项目A希望依赖项目C的2.0版本,这个时候就需要在项目A的pom中显式的声明 <dependencies> <dependency> <artifactId>project-b</artifactId> <exclusions> <exclusion> <artifactId>project-c</artifactId> </exclusion> </exclusions> </dependency> <dependency> <artifactId>project-c</artifactId> <version>2.0</version> </dependency> </dependencies>4、依赖调解 这里有2个原则:第一个是路径最近者优先,第二个是第一声明者优先 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- systemctl和正则表达式
- PostgreSQL与MySQL比较
- if-statement – 我可以在Swift中使用range运算符和if语句吗
- 升级cocoapods 0.36.0之后,解决更新的部分依赖库,不是最新
- “ORA-12541:TNS:无监听程序”错误 - listener.log日志达到
- 【PAT甲级】1008 Elevator (20 分)
- ruby – 使用bundle exec可以解决这个问题?
- c – 使用d指针的优缺点是什么?
- ruby-on-rails – Ruby on Rails,如何确定请求是由机器人还
- JSONP跨域请求数据报错 “Unexpected token -”的解决办法