我在更新依赖兄弟项目的依赖版本时遇到问题。
我的简化项目设置如下。
root
|--parent
|--tool-core
|--tool
|--functional-tests
父项目包含所有全局属性和依赖关系管理。功能测试取决于工具,工具取决于工具核心。根pom.xml
仅聚合(指定是否包含功能测试),父项目是所有项目的父项。我不知道这是否微不足道,但父级不包含在聚合中,因为它已经是每个子项目的父级。
现在,我的问题是我是否使用versions:set
更改了工具的版本。工具版本已更改,但对工具的任何依赖性均未更改。我该怎么做?我已经尝试了或多或少随机的其他目标,我确实尝试阅读手册。
我已经尝试使用<dependencyManagement>
部分并使用父级版本的属性,但这些版本不会更新到新版本。
非常感谢任何帮助。
加成
我收到消息“忽略reactor依赖:com.tool:tool:jar:null:1.2.3”充其量。这是我尝试versions:use-latest-releases
的时候。但是,versions:display-dependency-updates
确实表明存在“本地依赖”的更新(功能测试取决于工具)。
更新
似乎Maven会从存储库中查找新版本,包括本地的版本,现在我认为它很明显。但是,这意味着必须在更新依赖项之前构建并安装该工具到本地存储库。
我只是想知道这是否是将集成测试作为自己的项目的正确方法。我希望有一种方法可以立即更新版本。
更新
基本上我有以下设置。 functional-tests
的{{1}}的版本依赖性由tool
项目定义。我省略了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>
答案 0 :(得分:6)
我目前遇到了与“使用 - 发布”目标相同的问题,并且很高兴版本插件(刚才?)通过参数“ excludeReactor = false 强>“! : - )
答案 1 :(得分: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