如何仅针对多模块/ reactor构建中的依赖项自动更新版本?

时间:2015-07-23 06:31:23

标签: java maven maven-2 maven-3 maven-plugin

当我为root项目运行以下命令时,它会检查所有依赖项的更新:

mvn versions:use-latest-versions

我想限制只能从root可以访问的依赖项的版本更新:

root/pom.xml
├── A/pom.xml
│   └── D/pom.xml
│       └── E/pom.xml
├── B/pom.xml
└── C/pom.xml
    ├── F/pom.xml
    └── G/pom.xml

这些依赖项的组和工件ID在当前的reactor构建中(多模块构建)。

例如,我想要更新junitcommons-logging等外部依赖项。

有一个选项 excludeReactor 。我需要像 includeOnlyReactor 这样的对手。

否则,通过 includes 选项指定项目“拥有”所有可能的工件模式是不可靠和繁琐的工作。

1 个答案:

答案 0 :(得分:0)

将模块依赖关系版本设置为${project.version}良好的做法是在root pom的dependencyMnaagement部分中执行此操作。

示例:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>


<modules>
    <module>A</module>
    <module>B</module>
    <module>C</module>
</modules


<dependencyManagement>
    <dependency>
        <groupId>com.mycompany.app</groupId>
        <artifactId>A</artifactId>
        <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>com.mycompany.app</groupId>
        <artifactId>B</artifactId>
        <version>${project.version}</version>
    </dependency>

    ...And so on....

    <dependency>
        <groupId>com.mycompany.app</groupId>
        <artifactId>G</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencyManagement>


</project>  

然后,只要您想在另一个模块中使用该模块(例如B中的模块G),您只需

<dependency>
    <groupId>com.mycompany.app</groupId>
    <artifactId>B</artifactId>
</dependency>

要更改项目版本,请使用mvn versions:set。这将使所有模块保持在同一版本中,并且依赖关系管理部分也将依赖关系保持在同一版本中。

显然,如果您希望始终将模块保持在同一版本中,它将无法工作。但无论如何这将更加棘手。