Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多模块maven项目中,如何完全重建所有父模块_Maven - Fatal编程技术网

在多模块maven项目中,如何完全重建所有父模块

在多模块maven项目中,如何完全重建所有父模块,maven,Maven,这可能是个奇怪的问题。我们有一个复杂的多模块maven项目。假设我们有两个父作业:ParentJob1和ParentJob2,ParentJob1依赖于ChildJobA,ChildJobB。ParentJob2依赖于ChildJobB和ChildJobC。ChildJobC依赖于孙子JobX。假设一个用户更改了ChildJobB,我们想找到所有依赖ChildJobB的作业,在本例中是ParentJob1和ParentJob2,然后构建这些作业所依赖的所有作业,所以在本例中,基本上是所有作业。但

这可能是个奇怪的问题。我们有一个复杂的多模块maven项目。假设我们有两个父作业:ParentJob1和ParentJob2,ParentJob1依赖于ChildJobA,ChildJobB。ParentJob2依赖于ChildJobB和ChildJobC。ChildJobC依赖于孙子JobX。假设一个用户更改了ChildJobB,我们想找到所有依赖ChildJobB的作业,在本例中是ParentJob1和ParentJob2,然后构建这些作业所依赖的所有作业,所以在本例中,基本上是所有作业。但是,如果用户更改了ChildJobA,我们只希望构建ChildJobA和ParentJob1,因为这是依赖树上唯一的作业

有没有办法使用mvn compile命令来实现这一点?目前,我们必须使用mvn validate-pl ChildJobB-amd找到所有依赖于ChildJobB的作业(并解析输出,这很难可靠),然后使用mvn compile-pl ParentJob1、ParentJob2、ChildJobB-am构建所有依赖项。我们希望通过将ChildJobB传递给mvn compile来完成此操作,但是-am和-amd一起只构建父作业和子作业(例如,在本例中为ParentJob1、ParentJob2和ChildJobB),而不是父作业可能依赖的其他子作业。不幸的是,我们不能依赖工件来让其他子作业存在于repo中


任何想法都将不胜感激。Thx

请详细说明你的项目结构和你想要实现的目标。我不明白你为什么想要这样:我要么构建所有东西,要么直接或间接改变项目(即
-am
-amd
)。您重建的其他项目没有改变。@JFMeier我们无法构建所有内容,因为它会为每个父作业生成大约200MB的zip文件(我们可以有数百个),这会很快破坏我们的nexus回购协议。同样由于大小的原因,工件的快照版本会定期(比如每周)删除,这意味着我们不能依赖它们在repo中存在很长时间。例如,假设ChildJobC的工件已从repo中删除,我们尝试构建ParentJob2,因为ChildJobB已更改,构建将失败,因为我们找不到依赖项。@JFMeier事实上,现在我想起来了,最好的解决方案是有一种方法来确定依赖项是否在repo中,如果不在,请下载它,构建它。@JFMeier@khmarbaise这是一个很好的例子:()。假设nexus回购和本地回购都已删除,如果我执行
mvn compile-pl sample persist-amd-am
,它将失败,并出现以下错误
[error]未能在项目示例管理webapp上执行目标:无法解析项目org.sonatype.mavenbook的依赖项。运行:示例管理webapp:jar:1.0-SNAPSHOT:找不到工件org.sonatype.mavenbook。运行:示例安全性:jar:1.0-SNAPSHOT->[帮助1]
请详细说明您的项目结构以及您希望实现的目标。我不明白您为什么想要这样做:我要么构建所有内容,要么构建直接或间接改变的项目(即
-am
-amd
)。您重建的其他项目没有改变。@JFMeier我们无法构建所有内容,因为它会为每个父作业生成大约200MB的zip文件(我们可以有数百个),这会很快破坏我们的nexus回购协议。同样由于大小的原因,工件的快照版本会定期(比如每周)删除,这意味着我们不能依赖它们在repo中存在很长时间。例如,假设ChildJobC的工件已从repo中删除,我们尝试构建ParentJob2,因为ChildJobB已更改,构建将失败,因为我们找不到依赖项。@JFMeier事实上,现在我想起来了,最好的解决方案是有一种方法来确定依赖项是否在repo中,如果不在,请下载它,构建它。@JFMeier@khmarbaise这是一个很好的例子:()。假设nexus回购和本地回购都已删除,如果我执行
mvn compile-pl sample persist-amd-am
,它将失败,并出现以下错误
[error]未能在项目示例管理webapp上执行目标:无法解析项目org.sonatype.mavenbook的依赖项。运行:示例管理webapp:jar:1.0-SNAPSHOT:找不到工件org.sonatype.mavenbook。运行:示例安全性:jar:1.0-SNAPSHOT->[帮助1]