【问题标题】:Executing Groovy script from Maven从 Maven 执行 Groovy 脚本
【发布时间】:2013-08-15 15:13:54
【问题描述】:

从 Maven 执行 Groovy 脚本时出现以下错误:

[错误] 无法执行目标 org.codehaus.groovy.maven:gmaven-plugin:1.0:execute (default) on project /path/to/project: org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack: No这样的属性:类的项目:/path/to/groovy/script/Example -> [Help 1]

我搜索了可能的causesolution,但仍然不明白我做错了什么以及如何解决它。当我独立执行或通过 ANT 脚本执行时,我的脚本运行良好。

这是脚本:

class Example {
   public static void main(String[] args){
       new Example().show();
   }

   def show() {
       println 'Hello World'
  }
}

我就是这样称呼它的:

<dependencies>
    <dependency>
        <groupId>org.codehaus.gmaven.runtime</groupId>
        <artifactId>gmaven-runtime-1.7</artifactId>
        <version>1.3</version>
        <exclusions>
             <exclusion>
                 <groupId>org.codehaus.groovy</groupId>
                 <artifactId>groovy-all</artifactId>
             </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>1.7.6</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.groovy.maven</groupId>
            <artifactId>gmaven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>execute</goal>
                    </goals>
                    <configuration>
                        <source>${pom.basedir}/path/to/script/Test.groovy</source>
                    </configuration>
                </execution>
            </executions>
        </plugin>

【问题讨论】:

  • 尝试更新到gmaven-plugin 的1.5 版,有帮助吗?错误消息显示版本 1.0..
  • 试过了,同样的。这就是我现在在 POM 中的内容:pastebin.com/jG3Xrhgi.
  • 尝试用 ${basedir} 替换 ${pom.basedir}。
  • 试过了,没有变化。甚至通过其绝对路径引用脚本。
  • 你可以在名为Example.groovy 的脚本中只尝试println 'Hello World'(删除所有类和psvm 的东西)吗?

标签: maven groovy gmaven-plugin


【解决方案1】:

只要您能够访问默认变量,而不是使其成为 POGO,直接将您的脚本添加到 Example.groovy 文件。

脚本最终会自行编译成一个与文件名同名的 groovy 类(在本例中为 Example)。我对 class 和 psvm 的整个想法持怀疑态度。 :-)

//Example.groovy
println 'hello world'

println "$project"
println "$session"
println "$settings"

【讨论】:

  • dmahapatro 是对的。 project 可通过Binding 用于脚本。无法从类访问它
  • 谢谢。我把我的课改成了脚本。例如,我的原始类使用了 groovy.io.FileType,所以我必须添加对 groovy-all 的依赖,使我的 POM 为pastebin.mozilla.org/2863147,否则我会收到关于找不到 g.i.FileType 的错误。现在,当我执行 Maven 时,我得到另一个错误 - pastebin.mozilla.org/2863150.
  • @AlexKravets 好吧,这看起来像是一个与 Maven 完全相关的不同问题。您可以从thisthat 问题中找到一些有价值的意见。
  • @dmahapatro 感谢您的链接。最后一个问题,当我通过 ANT 脚本调用运行 groovy 类时,一切正常。那么通过 ANT 和 Maven 调用脚本有什么区别呢?
【解决方案2】:

无论出于何种原因,gmaven-plugin 似乎都不喜欢 main

如果你像这样编写代码

class Example {
   def show() {
       println 'Hello World'
   }
}
new Example().show();

它会起作用的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2011-04-24
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多