POM.xml
<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.yuxl.test</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>user</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
....
</dependencies>
</project>
坐标:
groupId,artifactId,version,packaing,classifier
groupId:当前Maven项目隶属的项目,必须的;
artifactId:项目中的模块,必须的;
version:版本,必须的;
packaging:maven项目的打包方式,默认为jar;
classifier:不能直接定义,由插件帮助生成的(不是太理解)。
依赖配置:
......
<dependencies>
<dependency>
<groupId>???</groupId>
<artifactId>???</artifactId>
<version>???</version>
<scope>???</scope>
<optional>???</optional>
<exclusions>
<exclusion>
...
</exclusion>
</exclusions>
</dependency>
</dependencies>
......
- groupId,artifactId,version:依赖性的坐标
- type:依赖类型,默认为jar
- scope:依赖范围
- optional:依赖是否可选
exclusions:排除传递依赖
依赖范围(scope)
(三种classpath:编译classpath、测试classpath、运行classpath)
- compile:编译依赖范围,默认。对编译、测试、运行都有效
- test:测试依赖范围,只对测试classpath有效,只有在编译test代码和运行test代码才有效(如:junit)
- provided:提供依赖范围,编译和测试classpath有效,运行时无效(如:servlet-api,因为有容器提供,不需要重复引入了)
- runtime:运行时依赖范围,对于测试和运行classpath有效,在编译主代码时无效(如:jdbc驱动)
- system:系统依赖范围,与三种classpath有关。(不是太理解,好像跟本机系统绑定,本地的,maven仓库以外的类库)
import:导入依赖范围(dependencyManagement)
scope 编译classpath 测试classpath 运行classpath compile y y y test n y n provided y y n runtime n y y system y y n
依赖传递性
如果:A ⇒B,B⇒C(A依赖于B,B依赖于C)
那么:A⇒C(A依赖于C)
依赖原则
- 路径最近者优先
- 第一声明者优先
和版本的大小无关
如:依赖关系 结果 备注 A ⇒D⇒C1,B⇒C2 C2 B的路径比A短 A ⇒C1,B⇒C2 C1 A声明在B前面
可选择性
(一般不用optional,因为一般对象设计中,有单一责任的原则,即一个类只做一项事,不要糅杂太多的功能)
如果:A ⇒B,B⇒X或者Y(A依赖于B,B依赖于X或者Y(可选的))使用了``` <optional>true</optional> ```
而A依赖B,可是B中有可选的X,Y,所以需要在A中显示声明下,到底用X,还是Y(即把B中的X或者Y其中一个copy过来,将<optional<true</optional>删除)。
排除依赖
在<exclusions<true</exclusions>中加上要排除的依赖
<dependency> ...... <exclusions> <exclusion> <groupId>???</groupId> <artifactId>???</artifactId> </exclusion> </exclusions> </dependency>
归类依赖
说白了,就是定义了一些变量,方便重复使用。(以后修改一处即可)
... <properties> <springframework.version>3.0</springframework.version> </properties> ... <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> </dependencies>
优化依赖
查看当前项目中已经解析的依赖:
mvn dependency:list
mvn dependency:tree
推荐一本书籍:《maven实战》作者:许晓斌 《maven 3 in action》 作为入门和基础学习很不错的。