Maven - 管理依赖项

Maven - 管理依赖项 首页 / Maven入门教程 / Maven - 管理依赖项

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的父级。以下示例将帮助您理解此概念。

dependency graph

以下是上面的依赖图的细节-

  • 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将通过遍历依赖关系图并构建应用程序来发现所有依赖关系。

从上面的示例中,可以学习以下关键概念-

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

邱岳的产品手记 -〔邱岳〕

数据分析实战45讲 -〔陈旸〕

Vue开发实战 -〔唐金州〕

零基础学Java -〔臧萌〕

Swift核心技术与实战 -〔张杰〕

Serverless入门课 -〔蒲松洋(秦粤)〕

Flink核心技术与实战 -〔张利兵〕

MySQL 必知必会 -〔朱晓峰〕

流程型组织15讲 -〔蒋伟良〕

好记忆不如烂笔头。留下您的足迹吧 :)