从Maven执行Groovy脚本

时间:2013-08-15 15:13:55

标签: maven groovy gmaven-plugin

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

  

[错误]无法执行目标org.codehaus.groovy.maven:gmaven-plugin:1.0:执行(默认)项目/路径/到/项目:org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack:否这样的属性:类的项目:/ path / to / groovy / script / Example - > [帮助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>

2 个答案:

答案 0 :(得分:3)

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

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

//Example.groovy
println 'hello world'

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

答案 1 :(得分:0)

无论出于何种原因,gmaven-plugin似乎不像主

如果您将其编码为

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

它会起作用。