我正在使用Apache Maven 3.3.9和Groovy Maven插件。这是pom.xml的相关部分(内联的Groovy脚本只是虚构的):
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>myGroovyPlugin</id>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
log.info('Test message: {}', 'Hello, World!')
</source>
</configuration>
</execution>
</executions>
</plugin>
如果我正在调用mvn install
,那么插件会调用内联Groovy脚本作为prepare-package阶段的一部分,并且工作得很好。但是,如果我试着打电话给插件&#39;目标直接通过mvn groovy:execute
我收到以下错误消息:
[错误]无法执行目标org.codehaus.gmaven:groovy-maven-plugin:2.0:执行(default-cli)项目exercise02:参数&#39; source&#39;目标org.codehaus.gmaven:groovy-maven-plugin:2.0:执行缺失或无效 - &gt; [帮助1]
答案 0 :(得分:4)
您遇到的错误已经指出了问题:插件无法找到source
配置选项,因为它确实只在myGroovyPlugin
执行中配置,即仅在execution
范围内,而不是全局配置。
这是configuration
之外executions
元素之间的主要区别(插件的所有执行的全局配置(甚至来自命令行)和execution
内的配置(仅适用于配置)那个特定的目标执行。)
要解决此问题,您应该在configuration
部分之外移动executions
元素,因为该插件不是Maven在default bindings期间调用的插件,这就足够了并且不会对您的构建产生影响:它将在myGroovyPlugin
执行期间以及从命令行显式执行时使用。
来自Maven POM reference,configuration
中的execution
:
将配置限制在此特定目标列表中,而不是插件下的所有目标。
为清楚起见,您应将其更改为以下内容:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<id>myGroovyPlugin</id>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
</execution>
</executions>
<configuration>
<source>log.info('Test message: {}', 'Hello, World!')</source>
</configuration>
</plugin>
因此configuration
将成为全局配置并应用于命令行执行并声明为executions
。
由于您使用的是Maven 3.3.9 ,您还可以使用稍微详细的模式invoke directly a specific configuration of an execution:
mvn groovy:execute@myGroovyPlugin
这种模式在你真的不想要全局配置的情况下很有用,因为你不想影响某个插件的其他(通常是默认的)执行,你真的想要使用特定的隔离在执行和命令行中配置。