Maven插件可以自动从“执行”部分看到“配置”标签吗?

时间:2013-01-28 22:44:14

标签: java maven maven-plugin jasmine-maven-plugin

我正在分析我可以在configuration的{​​{1}}部分内配置的Maven插件:

plugin

该插件完全忽略<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> 运行Maven。我确信执行是在Maven正确打印mvn test但未配置插件的情况下执行的 - 打印有关id部分移出外部时不存在的错误设置的警告<configuration>

问题:是插件实现的方式,它只接受“顶级”配置吗?我研究了它的源代码,在我看来,它是Maven在MOJO类上调用setter而且它对插件是透明的,选项来自哪个部分。

MOJO注释为:

<executions>

2 个答案:

答案 0 :(得分:3)

有问题的插件正在分支自定义生命周期。

分叉的自定义生命周期将删除指定的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的执行。我不是100%肯定,但在您的情况下,您将使用id default-resourcesjasmine-lifecycle-resources {{1}}来定义额外执行,以确保配置。

简洁的方法就是将配置放在外部并完成它。

答案 1 :(得分:0)

我在使用 maven-install-plugin:2.5.2 docker 映像的基础 maven:3.6.3-jdk-8 上遇到了这个问题。

感谢接受的答案让我走上正轨。

我不完全理解 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>...