一.maven的依赖配置
<project>
...
<dependencies>
<denpendcy>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<type></type>
<scope></scope>
<optional></optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
</denpendcy>
</dependencies>
</project>
虽然上面的配置很多,但是平时常用的只用三个:groupId,artifactId,version
上面各个配置的含义如下:
- groupId: 依赖组id,可以理解为java的包名,一般用域名倒写
- artifactId: 可以理解为项目名或者依赖名
- version:依赖的版本
- type:依赖的类型,对应项目坐标定义的packaging,大部分情况下,该属性不必声明,其默认值为jar
- scope:依赖的范围,这个对应的属性就比较多了,后续会做详细介绍
- optional:标记依赖是否可选
- exclusions:用来排除依赖的传递性,其中可以配置多个exclusion属性,每个标签对应着groupId、artifactId、version等三个基本属性
二.依赖范围-scope属性
属性值 | 含义 |
---|---|
compile | scope的默认值,编译,运行测试这三种classpath都有效。 |
provided | 已提供依赖范围。servlet-api |
runtime | 运行时依赖范围。jdbc的驱动 |
test | 测试依赖范围。Junit |
system | 系统依赖范围。如果需要引入本地的依赖就使用这个 |
三.依赖传递
A依赖B,B依赖C
那么A就可以间接的依赖了C,就可以使用C的方法
四.依赖冲突
A依赖B,A也依赖C,B和C都依赖D,而且依赖的版本还不一样,那么就会造成依赖冲突,这是大型项目中常见的问题
冲突的解决:
只需要将其中的一个排除即可
五.继承与聚合
在maven的多模块项目中存在继承和聚合的概念.
1.聚合
一个父项目中可以包含多个子模块
<?xml version="1.0"
encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baidu</groupId>
<artifactId>company</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>company-agent</module>
<module>company-java-core</module>
<module>company-https</module>
<module>company-http</module>
<module>company-management</module>
<module>company-security</module>
<module>company-login</module>
<module>company-sns</module>
<module>company-mt</module>
<module>company-message-scribe2mysql-storm</module>
<module>company-activator</module>
<module>company-activator-api</module>
<module>company-recard</module>
<module>company-zk-replicator</module>
<module>company-app-auth</module>
<module>company-app-auth-https</module>
<module>company-app-auth-applier</module>
<module>company-user-rights</module>
<module>company-idc</module>
</modules>
</project>
2.继承
继承和聚合有相似的地方,继承的特性是指建立一个父模块,我们项目中的多个模块都做为该模块的子模块,将各个子模块相同的依赖和插件配置提取出来,从而简化配置文件,父模块的打包方式必须为pom,否则无法构建项目。父模块和聚合模块经常可以做到合二为一。
通过在各个子模块中配置来表明其继承与哪一个父模块:
<parent>
<groupId>com.baidu</groupId>
<artifactId>miliao-rootpom</artifactId>
<version>2.0.3</version>
</parent>