Bos*_*one 19 skip maven parent-pom maven-reactor
我知道在一天内要求两次这是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构建期间在子级上启用它
Ric*_*ler 14
您不能跳过父版本,但您可以将配置文件配置为不通过一点黑客激活.此答案显示了如何通过基于文件的<activation>元素的存在或不存在来控制配置文件的激活.这样,您可以在父项中定义配置文件,但在该项目中将其取消激活,因为父项中存在标记文件.子项目的源文件中没有标记文件,因此将为这些项目激活该配置文件.
更新澄清:在我的测试项目中此配置是指分布在父项目(在SRC /主/资源文件)停用,但其中没有在他们的资源目录中的文件中的所有子项目激活.
<profile>
<id>test</id>
<activation>
<file>
<missing>src/main/resources/test.marker</missing>
</file>
</activation>
...
</profile>
Run Code Online (Sandbox Code Playgroud)
Rom*_*las 10
建立父母有什么问题?
实际上,在Maven中,有两个不同的概念(通常同时使用):
第一个是对所有孩子共同的一切的定义.您将父级定义为pom打包项目,并且可以将其安装在存储库中.
当您构建此父级的子级时,Maven2将检索此父级以将父级pom与子级pom合并.您可以通过运行命令查看整个pom.xml mvn help:effective-pom.
在这种情况下,将不会构建父pom,只会从存储库中检索它.
第二种情况是包含modules子项目列表的项目.原则是您在此项目上运行的每个命令也将在所有子模块上运行.模块的顺序将由Reactor定义,它将查看模块间的依赖关系,以找出必须在其他模块之前构建的模块.如果没有依赖项,那么它将获取在父pom.xml中定义的模块列表.
在这种情况下,如果在根项目上运行命令,Maven2将首先构建根项目,然后是子模块.您无法跳过根项目的创建.
编辑,感谢RichSeller评论
多模块(聚合项目)和继承(父项目)之间的差异的完整解释可以在Maven的书中找到,这里.
| 归档时间: |
|
| 查看次数: |
22169 次 |
| 最近记录: |