2010-08-31 97 views
3

我有更新从属同级项目的依赖版本的问题。如何使用版本Maven插件更新从属同级模块的版本

我的简化项目设置如下。

root 
|--parent 
|--tool-core 
|--tool 
|--functional-tests 

父项目包含所有全局属性和依赖项管理。功能测试取决于工具,而工具取决于工具内核。根目录pom.xml仅聚合(指定是否包含功能测试)并且父项目是所有项目的父项目。我不知道这是否微不足道,但父母并未包含在聚合中,因为它已经是每个子项目的父项。

现在,我的问题是,如果我改变工具的版本versions:set。工具版本已更改,但对该工具的任何依赖关系均未更改。我应该怎么做?我已经尝试了或多或少随机的其他目标,并尝试阅读手册。

我已经尝试过使用<dependencyManagement>部分并在父级版本中使用属性,但这些属性不会更新为新版本。

任何帮助真的很感激。

加成

我得到一个消息 “忽略反应器的依赖:com.tool:工具:罐子:空:1.2.3” 的最好的。这是当我尝试versions:use-latest-releases。但versions:display-dependency-updates确实显示“本地依赖项”上有更新(功能测试取决于工具)。

更新

看来,Maven的做新版本从储存库,包括当地一个现在,我想它似乎很明显查找。但是,这意味着必须在更新依赖关系之前将该工具构建并安装到本地存储库。

我只是想知道这是否是作为自己的项目进行集成测试的正确方法。我希望能够立即更新版本。

更新

基本上我有以下设置。 toolfunctional-tests版本依赖项由parent项目定义。我省略了tool-core,因为它可以作为tool的一部分进行处理。

根:

<groupId>com.somecompany</groupId> 
<artifactId>x-reactor</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<profiles> 
    <profile> 
     <id>cli</id> 
     <modules> 
      <module>tool</module> 
     </modules> 
    </profile> 
    <profile> 
     <id>deploy</id> 
     <modules> 
      <module>tool</module> 
      <module>functional-tests</module> 
     </modules> 
    </profile> 
</profiles> 

父:

<groupId>com.somecompany</groupId> 
<artifactId>x-parent</artifactId> 
<packaging>pom</packaging> 
<version>1.0</version> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>com.somecompany</groupId> 
      <artifactId>tool</artifactId> 
      <version>3.2.3</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

工具:

<parent> 
    <groupId>com.somecompany</groupId> 
    <artifactId>x-parent</artifactId> 
    <version>1.0</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

<groupId>com.somecompany</groupId> 
<artifactId>tool</artifactId> 
<packaging>jar</packaging> 
<version>3.2.3</version> 

官能测试:

<parent> 
    <groupId>com.somecompany</groupId> 
    <artifactId>x-parent</artifactId> 
    <version>1.0</version> 
    <relativePath>../parent/pom.xml</relativePath> 
</parent> 

<groupId>functional-tests</groupId> 
<artifactId>functional-tests</artifactId> 
<version>0.1</version> 
<packaging>pom</packaging> 

<dependencies> 
    <dependency> 
     <groupId>com.somecompany</groupId> 
     <artifactId>tool</artifactId> 
    </dependency> 
</dependencies> 
+0

你可以给你不同模块的poms片段......(只有模块的父母部分和模块部分)。 – khmarbaise 2010-08-31 07:42:06

回答

2

显然,必须以与需要更新的pom.xml所在的路径相同的路径运行目标versions:use-latest-versions。我通过将版本移动到父项目并仅更新它来解决此问题。我对这个解决方案不太满意,因为版本插件似乎不支持降级版本。此外,新版本从(本地)存储库获得,这意味着该工具必须在更新版本之前构建。我认为这是我最初的问题。

下面就来解决这个问题的脚本:(?刚才)

#!/bin/bash 

if [[ $# -lt 1 ]]; then 
    echo "Usage: $0 [version number]" 
    exit 1 
fi 

function revert_version() { 
    mvn -Pall versions:revert > /dev/null 
    echo "ERROR: Failed updating the version" 
    cat mvn_out.txt 
    exit 1 
} 

v=$1 
profile=cli 
echo "Updating the version to $v..." 
mvn -P$profile versions:set -DnewVersion=$v -DartifactId=tool -q 
[ $? -eq 0 ] || revert_version 

echo "Building the tool..." 
mvn -P$profile install > /dev/null 
[ $? -eq 0 ] || revert_version 

echo "Updating the dependencies..." 
mvn versions:use-latest-versions -Dincludes=com.somecompany:* -f parent/pom.xml -q 
[ $? -eq 0 ] || revert_version 
mvn -Pall versions:commit -q 
[ $? -eq 0 ] || revert_version 
6

我遇到了同样的问题,目前正在与“使用,发布”的目标,很高兴的是,版本插件支持这种情况下,由参数“excludeReactor = false”! :-)

相关问题