我试图通过检查maven存储库中可用的工件版本以及更新release
标记来了解如何让maven更新本地maven-metadata-local.xml文件本地元数据文件为最新版本。
我和我的团队正在开发一个包含多个代码模块的大型代码库。这些模块彼此依赖。
例如,ER_catalog模块依赖于ER_CORE_api,因此在ER_catalog pom.xml中,我们声明了对ER_CORE_api的依赖关系,并使用版本RELEASE。
Maven然后在本地元数据中查看ER_CORE_api的最新版本,并使用它来编译ER_catalog中的代码。
此元数据文件的本地版本如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<groupId>com.company.er</groupId>
<artifactId>ER_CORE_api</artifactId>
<versioning>
<release>0.562.0</release>
<versions>
<version>0.561.0</version>
<version>0.562.0-SNAPSHOT</version>
<version>0.562.0</version>
<version>0.563.0-SNAPSHOT</version>
<version>0.564.0-SNAPSHOT</version>
</versions>
<lastUpdated>20150513150410</lastUpdated>
</versioning>
</metadata>
但是,我的同事最近上传了版本0.563.0(使用maven发布插件)。因此,在工件所在的存储库中,元数据如下所示:
<metadata>
<groupId>com.company.er</groupId>
<artifactId>ER_CORE_api</artifactId>
<versioning>
<latest>0.563.0</latest>
<release>0.563.0</release>
<versions><version>0.561.0</version>
<version>0.562.0</version><version>0.563.0</version>
</versions>
<lastUpdated>20150513122648</lastUpdated>
</versioning>
</metadata>
我的代码无法编译,因为它要求本地maven repo获取最新版本的ER_CORE_api,并获得0.562.0而不是0.563.0。如何触发刷新此元数据(缺少删除文件)?
NB我知道有人会说我们应该使用特定的版本标签,而不是RELEASE。这就是我们使用RELEASE的原因:
我们可能有5个依赖于ER_CORE_api的模块。如果每个版本都有ER_CORE_api的硬编码版本,那么当我们将ER_CORE_api更新为新版本时,必须更新每个模块 - 然后它们都必须创建一个新版本(因为它们已经更改)。这意味着每次更改都会触发依赖树上的一连串更改,这是很多工作。另外,没有简单的方法可以找出哪些模块依赖于我已经改变的模块。
当我们冻结应用程序的发布时,我们将特定版本放在所有模块的pom.xml文件中。