共计 3423 个字符,预计需要花费 9 分钟才能阅读完成。
Maven 依赖治理
Maven 一个外围的个性就是依赖治理。当咱们解决多模块的我的项目(蕴含成千盈百个模块或者子项目),模块间的依赖关系就变得非常复杂,治理也变得很艰难。针对此种情景,Maven 提供了一种高度管制的办法。
可传递性依赖发现
一种相当常见的状况,比如说 A 依赖于其余库 B。如果,另外一个我的项目 C 想要应用 A,那么 C 我的项目也须要应用库 B。
Maven 能够防止去搜寻所有所需库的需要。Maven 通过读取我的项目文件(pom.xml),找出它们我的项目之间的依赖关系。
咱们须要做的只是在每个我的项目的 pom 中定义好间接的依赖关系。其余的事件 Maven 会帮咱们搞定。
通过可传递性的依赖,所有被蕴含的库的图形会疾速的增长。当有反复库时,可能呈现的情景将会持续上升。Maven 提供一些性能来管制可传递的依赖的水平。依赖范畴
传递依赖发现能够通过应用如下的依赖范畴来失去限度:依赖治理
通常状况下,在一个共通的我的项目下,有一系列的我的项目。在这种状况下,咱们能够创立一个公共依赖的 pom 文件,该 pom 蕴含所有的公共的依赖关系,咱们称其为其余子项目 pom 的 pom 父。接下来的一个例子能够帮忙你更好的了解这个概念。
接下来是下面依赖图的详情阐明:
App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。
Root 是 App-Core-lib 和 App-Data-lib 的父我的项目。
Root 在它的依赖局部定义了 Lib1、lib2 和 Lib3 作为依赖。
App-UI-WAR 的 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.companyname.groupname</groupId>
<artifactId>App-UI-WAR</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
App-Core-lib 的 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">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
App-Data-lib 的 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">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
Root 的 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.companyname.groupname</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname1</groupId>
<artifactId>Lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname2</groupId>
<artifactId>Lib2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname3</groupId>
<artifactId>Lib3</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
当初当咱们构建 App-UI-WAR 我的项目时,Maven 将通过遍历依赖关系图找到所有的依赖关系,并且构建该应用程序。
通过下面的例子,咱们能够学习到以下要害概念:
公共的依赖能够应用 pom 父的概念被对立放在一起。App-Data-lib 和 App-Core-lib 我的项目的依赖在 Root 我的项目里列举了进去(参考 Root 的包类型,它是一个 POM).
没有必要在 App-UI-W 里申明 Lib1, lib2, Lib3 是它的依赖。Maven 通过应用可传递的依赖机制来实现该细节。