EAR pom应该继承父母吗?

时间:2014-06-04 13:52:44

标签: maven multi-module

这是关于使用maven <dependencymanagement>部分的问题,就像关于如何和EAR模块应该发挥作用一样。

我有一个典型的用例。以下是maven模块

    • API
    • EJB
    • 网络

ear已将apiejbweb列为其依赖项,并像其他模块一样从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,但在某些情况下,您会遇到想要覆盖某些依赖版本的情况。

让我能够覆盖版本的正确方法是什么?在该示例中使用弹簧仅用于示例目的。它可能是任何其他罐子。

1 个答案:

答案 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}}