Maven 插件可以自动从“执行”部分查看“配置”标签吗?
Posted
技术标签:
【中文标题】Maven 插件可以自动从“执行”部分查看“配置”标签吗?【英文标题】:Can a Maven plugin see the "configuration" tag from an "execution" section automatically? 【发布时间】:2013-01-12 10:00:31 【问题描述】:我正在分析一个 Maven 插件,我可以在 plugin
的 configuration
部分中配置它:
<plugin>
...
<executions>...</executions>
<configuration>
<!-- items placed here are visible to the MOJO -->
</configuration>
</plugin>
该插件完全忽略execution
的任何配置项,但:
<plugin>
...
<executions>
<execution>
<id>execution1</id>
<phase>test</phase>
<goals><goal>test</goal></goals>
<configuration>
<!-- items placed here are ignored -->
</configuration>
</execution>
</executions>
</plugin>
我使用mvn test
运行 Maven。我确信执行会发生,因为 Maven 正确打印了它的 id
,但未配置插件 - 打印有关当 <configuration>
部分移出 <executions>
时不存在的不正确设置的警告。
问题:是插件的实现方式,它只接受“***”配置吗?我研究了它的源代码,在我看来,它是 Maven 调用 MOJO 类上的设置器,并且它对于选项来自哪个部分的插件是透明的。
MOJO 注释为:
* @component
* @goal test
* @phase test
* @execute phase="jasmine-process-test-resources"
【问题讨论】:
您对二传手的看法是正确的。 Plexus 是 DI 框架。 Some more info on that. 但请注意,现在有一个用于进行注入的 java 注释方法。 执行的配置只适用于生命周期绑定的执行。你确定这是你正在调用的执行吗 @StephenConnolly 我猜...我已将 MOJO 配置添加到我的答案中。 @MaDa 没什么区别...(除了阶段是完整的罂粟鸡)我们需要在<execution>
中查看您的<goals>
并确保您指定一个CLI 上在您绑定到的阶段之后的阶段
【参考方案1】:
我在使用maven:3.6.3-jdk-8
docker 映像时遇到了基本maven-install-plugin:2.5.2
的问题。
感谢接受的答案让我走上正轨。
我不完全理解this note in the documentation(在本节末尾),但您似乎可以给阶段目标一个执行ID,强制它使用您的配置:
注意:元素内部的配置过去不同于外部的配置,因为它们不能从直接命令行调用中使用,因为它们仅在它们绑定到的生命周期阶段被调用时才应用。因此,您必须将配置部分移到执行部分之外,以将其全局应用于插件的所有调用。由于 Maven 3.3.1 不再是这种情况,因为您可以在命令行上指定直接插件目标调用的执行 ID。因此,如果您想从命令行运行上述插件并且它是特定的 execution1 的配置,您可以执行:
mvn myqyeryplugin:queryMojo@execution1
我最后的工作 docker 命令:
docker run -it --rm --name parser -v "$(shell pwd)":/usr/src/parser -w /usr/src/parser maven:3.6.3-jdk-8 mvn -X install:install-file@install-my-jar-file
install-my-jar-file
是我的处决 ID <execution><id>install-my-jar-file</id>...
【讨论】:
【参考方案2】:有问题的插件正在分叉自定义生命周期。
分叉的自定义生命周期将删除指定 id (execution1
) 的执行(因为它是一个分叉的生命周期)
因此,由分叉生命周期执行的任何插件目标都将丢失其配置。主要的 mojo 本身应该获取配置,但出了问题的是分叉的生命周期执行。
我猜它是哪个插件,如果我猜对了,那就是custom lifecycle,您看到的警告来自例如other mojos 与文字类似
javascript source folder was expected but was not found. Set configuration property
`jsSrcDir` to the directory containing your JavaScript sources. Skipping
jasmine:resources processing.
在这种情况下,您需要将 <configuration>
部分放在外部块中,或者配置生命周期的执行。
为生命周期配置执行将需要使用魔术格式的id
s 添加执行。我不能 100% 确定,但在您的情况下,您将使用 default-resources
或 jasmine-lifecycle-resources
的 id
s 定义额外的执行,以确保配置成功。
不那么冗长的方法是将配置放在外部并完成。
【讨论】:
谢谢。我仍然没有完全掌握分叉生命周期的概念,但是您将我推向了正确的方向。将配置放在外部不是一个选项,我需要使用不同的参数集进行多次执行。 @Mada 你最后做了什么?我也有同样的问题。我自己并没有掌握分叉生命周期的概念。我不明白有关使用“魔术 id”的一点点 这个问题是由 Jasmine(一个 JavaScript 库)的 Maven 插件触发的。在我提出这个问题后不久,我们决定放弃尝试使用 Java 管理 JS 应用程序,而采用 100% JavaScript 方法。以上是关于Maven 插件可以自动从“执行”部分查看“配置”标签吗?的主要内容,如果未能解决你的问题,请参考以下文章
Jacoco Maven 插件 - 生命周期配置未涵盖插件执行