我知道在一天内要求两次这是mauvais ton,但这是另一个Maven益智游戏:
我有一个父POM,它定义了5个模块(5个子项目).由于每个模块的执行方式完全相同,因此我将<profile><build>节段拉入父POM以消除重复的代码.现在 - 如果我从每个模块单独执行构建它可以工作,但是如果我想一次构建所有模块并移动到父目录我得到错误,因为Maven尝试执行的第一件事是父项目本身:
mvn package -P release
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] DWD Parent project
[INFO] Projects
Run Code Online (Sandbox Code Playgroud)
之后构建失败,因为exec插件尝试执行不存在的东西.看一下输出很明显反应堆插件正在驱动构建但是如何配置reactor跳过父代?
PS为了防止混淆 - 我试图抑制父级的配置文件执行,并在same构建期间在子级上启用它
我们正在尝试将多个模块应用程序移动到maven,并遇到一些问题.
每个模块都独立存储在cvs中.我们为每个应用程序提供了清单文件,列出了该应用程序所需的模块(以及可选的版本).并非所有模块都是maven形式.
因此,应用程序'customer_care'具有以下清单:
<manifest>
<module id="MY_api"/>
<module id="custcare_webapp"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)
同样,应用程序"核心批处理"有一个这样的清单:
<manifest>
<module id="MY_api"/>
<module id="core"/>
<module id="batch"/><!--NB this is a non-maven module -->
</manifest>
Run Code Online (Sandbox Code Playgroud)
我已经开始'mavenising'我们的代码,所以MY_api项目有一个定义了依赖项的pom.xml,包括另一个内部代码模块'central_config'.我已指定版本RELEASE.
这一切都很好,直到我需要创建一个冻结的清单.我可以为每个模块指定一个版本:
<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>
Run Code Online (Sandbox Code Playgroud)
但是这个构建是不可重现的,因为MY_api中'centralconfig'依赖的版本是'RELEASE'.因此,如果有人发布了新版本的"centralconfig",那么下次我们构建这个冻结的清单时,就会有所不同.
那么为什么我们不使用像central-config这样的依赖关系的硬编码版本呢?因为那样,每当有人将centralconfig更新到新版本时,我们就必须更新10或20个pom文件.依赖于中央配置的所有东西,以及依赖于它的所有内容,都需要更新pom.xml并重新发布.这不仅是很多工作,我不知道如何以编程方式可靠地识别声明依赖于中央配置的每个模块.
我可以在一个地方定义'centralconfig.version',然后在我的所有模块中引用它吗?如果是这样,我应该在哪里这样做?我对父母不太了解,但我觉得他们可能会提供解决方案.
似乎使用父pom是可行的方法.但根据这个问题: maven项目可以有多个父母吗?,maven儿童项目不可能拥有多个父母.
那么,MY_api模块如何成为custcare_webapp和core_batch的子项?
我已经得出结论,maven不符合我的要求,我们已经回到使用我们12年的本土解决方案构建使用ant和CVS.