java - 无法将 Groovy Maven 插件作为目标执行

标签 java maven groovy maven-3 pom.xml

我正在使用带有 Groovy Maven 插件的 Apache Maven 3.3.9。这是 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 脚本将作为准备包阶段的一部分被插件调用并且工作正常。但是,如果我尝试通过 mvn groovy:execute 直接调用插件的目标,我会收到以下错误消息:

[ERROR] Failed to execute goal org.codehaus.gmaven:groovy-maven-plugin:2.0:execute (default-cli) on project exercise02: The parameters 'source' for goal org.codehaus.gmaven:groovy-maven-plugin:2.0:execute are missing or invalid -> [Help 1]

最佳答案

您得到的错误已经指出了问题所在:插件无法找到 source 配置选项,因为它确实只在 myGroovyPlugin 执行中配置,也就是说,仅在 execution 范围内,而不是作为全局配置。

这是 executions 之外的 configuration 元素(插件所有执行的全局配置(甚至来自命令行)和 执行中的主要区别(配置仅适用于该特定目标执行)。

在这种情况下,要解决此问题,您应该将 configuration 元素移到 executions 部分之外,因为该插件不是在 default bindings 期间调用的插件。通过 Maven,这就足够了并且不会影响您的构建:它仍将在 myGroovyPlugin 执行期间以及从命令行显式执行时使用。

来自 Maven POM reference执行中的配置:

confines the configuration to this specific list of goals, rather than all goals under the plugin.


为了清楚起见,您应该将其更改为以下内容:

<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>

因此,配置 将成为全局配置,并应用于命令行执行和声明的执行


因为您使用的是 Maven 3.3.9,您还可以对 invoke directly a specific configuration of an execution 使用稍微更详细的模式:

mvn groovy:execute@myGroovyPlugin

这种模式在你真的不想要全局配置的情况下很有用,因为你不想影响某个插件的其他(通常是默认的)执行,并且你真的想在一个执行和从命令行。

关于java - 无法将 Groovy Maven 插件作为目标执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612317/

相关文章:

java - 继续循环直到用户输入正确的输入类型?

java - XY 图 : Annotation is placed incorrectly with respect to Y axis

jenkins - 管道作业 - 向上游传递参数?

java - 使用 Gradle 和 Groovy/Spock 测试 Java 6 库或应用程序

java - 从 Shiro 主题获取 grails 域对象

Java 并发修改异常

java - 从 spring mvc 设置一个选择框值

java - 如何在同一个 pom.xml 中使用 selendroid 和 seleniumhq ?

java - 如何在 Spring 中关闭部署 DEBUG 日志

java - 错误 "The first module you upload to a new application must be the ' 默认'模块”