maven依赖基础
一个简单的依赖
<dependency>
<groupId>com.alibaba.share</groupId>
<artifactId>test</artifactId>
<version>1.4</version>
</dependency>
依赖库命名规则:
${groupId.part1}/${groupId.part2}/${version}
例:com/alibaba/share/1.4
依赖库文件命名规则:
${artifactId}-${version}-${classifier}.${type}
例:test-1.4-source.jar
注:classfier即分类器,多数的时候是用不到的,不过有写情况需要,例:
TestNG强制需要你提供分类器,以区别jdk14和jdk15
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.7</version>
<classifier>jdk15</classifier>
</dependency>
maven依赖范围
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
上面的scope即约定依赖范围。
compile:默认值,一直可用,最后会被打包
provided:编译期间可用,不会被传递依赖,不会被打包。例:依赖于web容器中的提供的一个jar包,在编译的时候需要加入依赖(web容器还没有介入),运行的时候由web容器来提供。
test:执行单元测试时可用,不会被打包,不会被传递依赖
runtime:运行和测试时需要,但编译时不需要
system:不推荐使用
maven依赖管理
避免不同子模块中依赖版本冲突
在主pom中配置依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
...
<dependencies>
</dependencyManagement>
在子pom中添加依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
dependencyManagement实际上不会真正引入任何依赖,在子pom中添加之后才会。在父pom中配置了之后,子模块只需使用简单groupId和artifactId就能自动继承相应的父模块依赖配置。如果子pom中定义了version,则覆盖management中的。
可选依赖
添加不可传递的依赖:
在一个项目中加入依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>1.5</version>
<optional>true</optional>
</dependency>
在另一个项目依赖于上一个项目,但是如果需要用到mysql的依赖,仍然需要去添加。
依赖版本界限
要求的依赖版本>=3.8且<4.0
<version>[3.8,4.0)</version>
要求的依赖版本<=3.8.1
<version>[,3.8.1]</version>
要求必须是3.8.1版本,如果不是的话会构建失败,提示版本冲突。原来的写法<version>3.8.1</version>的意思是所有版本都可以,但最好是3.8.1
<version>[3.8.1]</version>
排除依赖
依赖project-a但是排除掉对project-a中引入的project-b的依赖
<dependency>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>project-a</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>org.sonatype.mavenbook</groupId>
<artifactId>project-b</artifactId>
</exclusion>
</exclusions>
</dependency>
替换依赖
直接使用上一步中的排除掉,然后添加要替换进来的依赖就可以了,没有什么特殊的标志来标志这个是替换进来的。
版本冲突仲裁
版本仲裁规则(在maven 2.2.1版本上测试验证)
• 按照项目总POM的DependencyManager版本声明进行仲裁(覆盖),但无警告。
• 如无仲裁声明,则按照依赖最短路径确定版本。
• 若相同路径,有严格区间限定的版本优先。
• 若相同路径,无版本区间,则按照先入为主原则。
分享到:
相关推荐
五、基于IDEA 进行Maven依赖管理 1. 依赖管理概念 Maven通过pom.xml文件管理项目的依赖,每个依赖都有其GAV信息,Maven会自动解决依赖的版本和传递性依赖。 2. Maven工程核心信息配置和解读(GAVP) pom.xml文件中...
Maven依赖管理是Maven的核心功能之一,它允许开发者声明项目所依赖的库,并自动下载这些库到本地仓库,以便于构建和运行项目。在Maven的项目对象模型(Project Object Model,POM)中,依赖被定义在`<dependencies>`...
Maven就可以替我们自动的将当前jar包所依赖的其他所有jar包全部导入进来,无需人工参与,节约了我们大量的时间和精力。用实际例子来说明就是:通过Maven导入commons-fileupload-1.3.jar后,commons-io-2.0.1.jar会被...
【Maven的依赖验证项目】是一个关于Maven项目管理和依赖管理的实践案例,它与CSDN博主songdeitao的一篇文章《Maven依赖管理详解》相关联。在这个项目中,我们将深入理解Maven如何处理项目的依赖关系,以及如何有效地...
依赖范围(scope)是Maven依赖管理的一个重要概念。scope定义了依赖项的使用范围,主要有以下几个选项:compile、provided、runtime和test。compile表示依赖项在编译时需要,provided表示依赖项在编译和测试时需要,但...
Maven的核心功能之一是依赖管理,它允许用户通过在`pom.xml`文件中声明依赖关系,自动处理项目所需的第三方库。 Maven工程的构建过程中,真正的jar包存放在仓库中,而项目中仅需放置jar包的坐标信息。这样,当需要...
Maven的依赖管理遵循一些原则,如“最接近优先”规则,如果一个项目有两个或更多版本的相同依赖,Maven会优先选择离项目最近的依赖。此外,Maven还支持排除依赖,如果你不想引入某个特定的子依赖,可以通过...
适用人群:该教程适合软件开发人员、架构师以及对自动化构建和依赖管理感兴趣的IT专业人士。无论您是初学者还是有经验的Java开发者,都可以从中获益。 使用场景及目标:您可将此教程作为学习Maven的起点,理解其...
Maven依赖管理遵循“传递性”原则,即项目可以直接依赖其他项目,间接依赖也会被自动引入。当出现相同类路径的冲突时,Maven会遵循“第一声明者优先”原则,即先声明的依赖版本优先。 2. **排除依赖(Exclusions)...
在软件开发领域,Maven是一个广泛使用的项目管理和综合工具,主要负责构建、依赖管理和项目信息管理。本示例将深入探讨Maven中的“依赖”、“继承”和“聚合”这三个核心概念,帮助开发者更好地理解和应用Maven。 ...
Maven依赖管理的核心在于它的`pom.xml`文件,这是一个项目对象模型(Project Object Model)的配置文件,记录了项目的所有依赖。通过在`pom.xml`中声明依赖,Maven可以自动下载并管理这些依赖,避免了手动下载JAR...
这个过程涉及到的知识点主要包括 Maven 的使用、源码编译流程以及依赖管理。 首先,让我们深入了解 Maven。Maven 是一个项目管理和综合工具,用于自动化构建、依赖管理和项目信息管理。在Doris中,Maven 负责管理...
在Java开发领域,Maven是广泛使用的...综上所述,这个“maven依赖包(用于博客项目)”包含了构建博客应用所需的全部或部分关键库,通过Maven的依赖管理和构建机制,能够有效地组织和管理项目的复杂性,加速开发进程。
在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java...这不仅简化了项目的构建过程,也使得依赖管理变得更加有序和高效。通过Maven,你可以轻松地集成和利用GeoServer的强大功能,构建出自己的地图服务应用。
总的来说,CKFinder 2.3 通过 Maven 依赖管理,简化了在 Java 项目中集成文件管理功能的过程。正确地添加和配置 CKFinder,可以让你的用户轻松地进行文件上传和管理,提高应用程序的用户体验。记得根据具体需求调整 ...
总的来说,Maven的依赖管理是其强大功能的一部分,它极大地简化了Java项目的构建流程,让开发者能够更专注于代码编写,而不是库的管理。通过熟练掌握Maven的依赖引入和管理,开发者可以更高效地进行项目开发和协作。
【标题】"maven依赖包2"涉及到的是Java开发中重要的构建工具——Maven的依赖管理部分。在Java世界里,Maven是一个广泛使用的项目管理和综合工具,它可以帮助开发者管理和构建Java项目,通过解决项目的依赖关系,使得...