0

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

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

我搜索了可能的原因解决方案,但仍然不明白我做错了什么以及如何解决它。当我独立执行或通过 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>
4

2 回答 2

4

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

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

//Example.groovy
println 'hello world'

println "$project"
println "$session"
println "$settings"
于 2013-08-15T18:24:03.650 回答
1

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

如果你像这样编码

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

它会起作用的。

于 2014-04-29T02:33:28.313 回答