gpt4 book ai didi

java - 如何将多模块项目移动到maven

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:49 26 4
gpt4 key购买 nike

我们正在尝试将几个多模块应用程序移动到 Maven,但遇到了一些问题。

每个模块独立存放在cvs中。我们有每个应用程序的 list 文件,其中列出了该应用程序所需的模块(以及可选的版本)。并非所有模块都是 Maven 形式。

因此应用程序“customer_care”具有以下 list :

 <manifest>
<module id="MY_api"/>
<module id="custcare_webapp"/>
</manifest>

类似地,应用程序“核心批处理”具有如下 list :

 <manifest>
<module id="MY_api"/>
<module id="core"/>
<module id="batch"/><!--NB this is a non-maven module -->
</manifest>

我已经开始“mavenising”我们的代码,所以 MY_api 项目有一个 pom.xml 定义了依赖关系,包括另一个内部代码模块“central_config”。我已指定版本 RELEASE。

问题

一切正常,直到我需要创建卡住 list 。我可以为每个模块指定一个版本:

 <manifest>
<module id="MY_api" version="0.123.0"/>
<module id="core" version="0.456.0"/>
<module id="batch" version="0.789.0"/><!--NB this is a non-maven module -->
</manifest>

但此构建不可重现,因为 MY_api 中“centralconfig”依赖项的版本是“RELEASE”。因此,如果有人发布了新版本的“centralconfig”,那么下次我们构建这个卡住的 list 时,情况就不同了。

那么为什么我们不使用像 central-config 这样的依赖项的硬编码版本呢?因为那时,每次有人将 centralconfig 更新到新版本时,我们可能必须更新 10 或 20 个 pom 文件。依赖于中央配置的一切,以及依赖于中央配置的一切,都需要更新 pom.xml 并重新发布。这不仅需要大量工作,而且我不知道如何以编程方式可靠地识别每个声明对中央配置有依赖性的模块。

可能的解决方案?

我可以在一个地方定义“centralconfig.version”,然后在我的所有模块中引用它吗?如果是这样,我应该在哪里做这个?我对 parent poms 了解不多,但我觉得他们可能会提供解决方案。

更新

似乎使用父 pom 是可行的方法。但是根据这个问题: Can maven projects have multiple parents? ,maven子项目不可能有多个父项。

那么 MY_api 模块如何成为 custcare_webapp 和 core_batch 的子模块呢?

更新

我得出的结论是 Maven 不能满足我的要求,我们又回到了使用 12 年前使用 ant 和 CVS 构建的自制解决方案。

最佳答案

通常比管理版本的父结构更好的另一个选择是导入依赖项。

为了说明这是如何工作的,您创建了一个仅包含一个 pom 的项目,该 pom 指定了用于所有模块的版本:

<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>module-versions</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>a</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>2</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

然后,在所有需要依赖于任何硬编码版本的项目中,按以下方式导入该项目:

  <dependencyManagement>
<dependencies>
<dependency>
<groupId>test</groupId>
<artifactId>module-versions</artifactId>
<version>1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

这样一来,只要您发布任何依赖的新版本,您只需更改 module-versions 项目即可。

通过这种方式,您可以拥有多个“模块版本”-项目来将事情分开一些。

当然,你仍然有一个问题,所有项目要使用新版本也必须依次发布,但这是在 Maven 中使用已发布的依赖项的成本。

关于java - 如何将多模块项目移动到maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30258125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com