我正在分析我可以在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>
答案 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-resources
或jasmine-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>...