Maven的核心功能之一是依赖管理。一旦无涯教程要处理多模块项目(由数百个模块/子项目组成),管理依赖项将是一项艰巨的任务。Maven提供了高度的控制权来管理这种情况。
依存关系
当一个库(如A)依赖于另一个库(如B)时,通常是一种情况。如果另一个项目C要使用A,那么该项目也需要使用库B。
Maven帮助避免发现所有所需库的此类要求。 Maven通过读取依赖项的项目文件(pom.xml),弄清它们的依赖项等等来做到这一点。
只需要在每个项目pom中定义直接依赖项。 Maven自动处理其余部分。
依赖范围
可以使用各种依赖关系范围来限制传递依赖关系的发现,如下所述。
Sr.No. | Scope & Remark |
---|---|
1 |
compile 此范围指示依赖项在项目的类路径中可用。这是默认范围。 |
2 |
provided 此范围指示依赖项将在运行时由JDK或Web服务器/容器提供。 |
3 |
runtime 此作用域指示依赖关系对于编译不是必需的,但在执行过程中是必需的。 |
4 |
test 此范围表明依赖性仅可用于测试编译和执行阶段。 |
5 |
system 此范围表明您必须提供系统路径。 |
6 |
import 仅当依赖项为pom类型时,才使用此范围。此范围指示应使用该POM的<dependencyManagement>部分中的依赖项替换指定的POM。 |
依赖管理
通常,在一个公共项目下有一组项目。在这种情况下,可以创建具有所有公共依赖项的公共pom,然后将其作为子项目的pom的父级。以下示例将帮助您理解此概念。
以下是上面的依赖图的细节-
- App-UI-WAR依赖于App-Core-lib和App-Data-lib。
- Root是App-Core-lib和App-Data-lib的父代。
- 根在其依赖项部分中将Lib1,lib2,Lib3定义为依赖项。
App-UI-WAR
<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
<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
<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
<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 项目中列出。
在App-UI-WAR中无需将Lib1,lib2,Lib3指定为依赖项。 Maven使用传递依赖机制来管理这样的细节。
参考链接
https://www.learnfk.com/maven/maven-manage-dependencies.html
标签:教程,依赖,1.0,lib,companyname,App,无涯,Maven,com From: https://blog.51cto.com/u_14033984/9321187