Ben*_*Ben 5 mojo maven-plugin maven maven-release-plugin
我有一个自定义插件,作为 release:perform 目标的一部分,我在我们所有的项目上运行它。
我们刚刚开始使用多模块构建,我注意到我的插件只在顶层模块中运行。在发布结束时,我必须对我的插件做什么才能使其在所有模块上单独运行?我是否必须在插件代码本身中遍历它们?如果是这样,是否有这样做的示例,因为从我看来,MavenProject.getModules() 只返回这些模块的字符串名称列表,而我看不到如何获取这些模块的信息(我的插件需要每个的 groupId:artifactId:version,在这种情况下,模块并不总是具有相同的版本)。
我已经尝试过使用和不使用 @aggregator,但这并没有改变我的问题。
我假设这与从 CLI 直接运行插件(不绑定到阶段)相同,它也只在项目的顶层运行,并报告所有子模块的 SKIPPED。
我正在使用 Maven 3.0.3。
我的 Maven 插件也有同样的问题。它只被调用一次(通常是针对反应器中的第一个模块),我最终追踪到我的插件具有 Maven 注释“@requiresProject false”。Maven Reactor 似乎只调用此类插件一次。一旦我切换到“@requiresProject true”,我的魔力就会为每个模块调用一次。我并没有沉迷于release:perform,所以YMMV。
至于访问所有模块,您可以像这样注入它们的 MavenProject 对象,而不是使用 MavenProject.getModules() 给出它们的名称:
/**
* The projects in the reactor.
*
* @parameter expression="${reactorProjects}"
* @readonly
*/
private List<MavenProject> reactorProjects;
Run Code Online (Sandbox Code Playgroud)
绑定到生命周期阶段时请注意 @aggregator。“当绑定到生命周期时,聚合器 mojo 可能会产生一些令人讨厌的副作用。它可以强制提前执行...生命周期阶段,并可能导致最终执行...阶段的构建两次。” 参考
如何强制 Maven MOJO 在构建结束时仅执行一次?有一些 @aggregator 的替代品。
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |