这是关于使用maven <dependencymanagement>
部分的问题,就像关于如何和EAR模块应该发挥作用一样。
我有一个典型的用例。以下是maven模块
ear已将api
,ejb
和web
列为其依赖项,并像其他模块一样从parent
继承。
以下是parent
的依赖关系管理部分。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.4</version>
</dependency>
</dependencyManagement>
和ejb
我有一个依赖关系(不是在依赖关系管理部分,而是依赖关系),并且显式覆盖了版本。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5</version>
</dependency>
当我从父级构建整个项目时(因为它们在父pom中聚合),EAR项目会创建最终的EAR artificat。
到目前为止一切顺利,但问题出现在依赖关系的解决方式上。我的直觉是因为ejb模块明确列出了spring core version 2.5,它将被打包为依赖项。但实际发生的是,作为父pom的子的EAR模块使用父级的依赖关系管理部分中提到的版本,最终以3.4作为弹簧核心版本。
经过大量研究后,我确信这是根据Maven文档。但我现在想到的是,如果我将控制所有依赖版本的父pom的策略与继承父级的EAR模块的策略结合起来,我基本上“卡住”(在某些情况下)父定义的内容没有有可能超越它。
虽然有人可能会认为理想情况下应该始终使用相同版本的jar,但在某些情况下,您会遇到想要覆盖某些依赖版本的情况。
让我能够覆盖版本的正确方法是什么?在该示例中使用弹簧仅用于示例目的。它可能是任何其他罐子。
答案 0 :(得分:0)
Dependency Management实际上允许您集中管理依赖项版本,而不必在所有子项中添加依赖项(讨论公共依赖项)。这有很多帮助,当有多个继承级项目时,子项可以从父pom获得传递依赖项,就像你的项目一样。
关于版本覆盖,不要误会,因为你可以覆盖继承的依赖版本,只需在需要拥有自己版本的工件的子模块中声明它。< / p>
这是一个示例展示,说明一个名为root
的简单项目,并有两个子模块; blessed-module
继承其父工件版本的odd-module
和选择了自己的路径的root
\+ blessed-module
+ odd-module
以及他自己的工件版本:
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dependency.management.showcase</groupId>
<artifactId>root</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>blessed-module</module>
<module>odd-module</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
父pom将声明具有以下描述符( pom.xml )的集中式依赖项:
blessed-module
子模块将如下所示,从好<?xml version="1.0" encoding="UTF-8"?>
<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>
<parent>
<groupId>dependency.management.showcase</groupId>
<artifactId>root</artifactId>
<version>1.0</version>
</parent>
<artifactId>child-module</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
</dependencies>
</project>
开始:
odd-module
和<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>
<parent>
<artifactId>root</artifactId>
<groupId>dependency.management.showcase</groupId>
<version>1.0</version>
</parent>
<artifactId>odd-module</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5</version>
</dependency>
</dependencies>
</project>
的 pom.xml 文件:
root
现在不需要进一步的操作,jsut去导航到mvn dependency:tree
主路径并从终端执行maven命令以使所有依赖树显示在你面前
spring-core
您将看到子模块的[INFO] ------------------------------------------------------------------------
[INFO] Building root 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ root ---
[INFO] dependency.management.showcase:root:pom:1.0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building child-module 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ child-module ---
[INFO] dependency.management.showcase:blessed-module:jar:1.0
[INFO] \- org.springframework:spring-core:jar:3.2.8.RELEASE:compile
[INFO] \- commons-logging:commons-logging:jar:1.1.3:compile
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building odd-module 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ odd-module ---
[INFO] dependency.management.showcase:odd-module:jar:1.0
[INFO] \- org.springframework:spring-core:jar:2.5:compile
[INFO] \- commons-logging:commons-logging:jar:1.1:compile
[INFO] ------------------------------------------------------------------------
工件版本略有不同:
{{1}}