2014-01-30 31 views
0

tl; dr:如何在使用GMaven從Maven內運行Groovy腳本時解決「No such property: project」錯誤?我使用的是GMaven 1.5,Groovy 2.2.1。和Java 1.7,以及Maven 3.1.0。從GMaven運行腳本導致「無此屬性:項目」異常


我有一個Groovy腳本 - DeltaCodeGen(它沒有包) - 生成的Java代碼(Java項目,這是唯一的Groovy項目)。它曾經是我們會讓腳本生成.java文件,並且這些文件將被檢入,但現在我們正試圖在generate-sources階段期間在Maven構建期間構建它們。

我可以從我的IDE成功運行該腳本,但是當我嘗試運行它爲我構建的一部分,我得到

Caused by: org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack: No such property: project for class: DeltaCodeGen 

儘管other answers,我的劇本沒有一個叫project變量,也沒有完全包含字符串「project」。它不擴展任何其他腳本。它使用的唯一的庫是Reflections(對Servlet API的需求仍然是open question)。

運行的身材,我在stderr注意到(運行mvn -X 2>mvn_err.log)以下錯誤:

java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.InvokerHelper.getVersion()Ljava/lang/String; 
    at org.codehaus.gmaven.runtime.v1_6.ProviderImpl.name(ProviderImpl.java:70) 
    at org.codehaus.gmaven.feature.support.ProviderSupport.asString(ProviderSupport.java:175) 
    at org.codehaus.gmaven.feature.support.ProviderSupport.toString(ProviderSupport.java:68) 
    at org.slf4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:304) 
    at org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:276) 
    at org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:230) 
    at org.slf4j.helpers.MessageFormatter.format(MessageFormatter.java:152) 
    at org.slf4j.impl.SimpleLogger.formatAndLog(SimpleLogger.java:414) 
    at org.slf4j.impl.SimpleLogger.debug(SimpleLogger.java:512) 
    at org.codehaus.gmaven.runtime.loader.DefaultProviderSelector.register(DefaultProviderSelector.java:135) 
    at org.codehaus.gmaven.runtime.loader.DefaultProviderSelector.select(DefaultProviderSelector.java:72) 
    at org.codehaus.gmaven.runtime.loader.DefaultProviderManager.select(DefaultProviderManager.java:102) 
    at org.codehaus.gmaven.plugin.ProviderMojoSupport.provider(ProviderMojoSupport.java:120) 
    at org.codehaus.gmaven.plugin.ComponentMojoSupport.feature(ComponentMojoSupport.java:49) 
    at org.codehaus.gmaven.plugin.ComponentMojoSupport.feature(ComponentMojoSupport.java:42) 
    at org.codehaus.gmaven.plugin.ComponentMojoSupport.doExecute(ComponentMojoSupport.java:53) 
    at org.codehaus.gmaven.plugin.MojoSupport.execute(MojoSupport.java:71) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:318) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:414) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:357) 

我的Maven配置爲:

<build> 
    <plugins> 
     <plugin> 
      <!-- see: http://docs.codehaus.org/display/GMAVEN/Executing+Groovy+Code#ExecutingGroovyCode-ExecuteaLocalGroovyScript --> 
      <groupId>org.codehaus.gmaven</groupId> 
      <artifactId>gmaven-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>execute</goal> 
        </goals> 
        <configuration> 
         <source>${pom.basedir}/src/main/groovy/DeltaCodeGen.groovy</source> 
        </configuration> 
       </execution> 
      </executions> 
       <dependencies> 
        <dependency> 
         <groupId>org.reflections</groupId> 
         <artifactId>reflections</artifactId> 
         <version>0.9.9-RC1</version> 
        </dependency> 

        <dependency> 
         <groupId>org.codehaus.groovy</groupId> 
         <artifactId>groovy-all</artifactId> 
         <version>2.2.1</version> 
        </dependency> 

        <dependency> 
         <groupId>javax.servlet</groupId> 
         <artifactId>javax.servlet-api</artifactId> 
         <version>3.1.0</version> 
        </dependency> 
      </dependencies> 
     </plugin> 
    </plugins> 
</build> 

回答

4

我終於有工作與GMavenPlus更換GMaven(被放棄)(當前維護)。

由於運行本地腳本,目前尚未爲example給出的,這是什麼在我的POM爲我工作:

<plugin> 
    <groupId>org.codehaus.gmavenplus</groupId> 
    <artifactId>gmavenplus-plugin</artifactId> 
    <version>1.0</version> 
    <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <scripts> 
        <script>file:/${pom.basedir}/src/main/groovy/DeltaCodeGen.groovy</script> 
       </scripts> 
      </configuration> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.codehaus.groovy</groupId> 
      <artifactId>groovy-all</artifactId> 
      <version>2.2.1</version> 
     </dependency> 
    </dependencies> 
</plugin> 
+0

你好ArtB ..我也有類似的問題,因爲無法訪問我的groovy腳本中的POM屬性。因此,儘可能按照您的建議嘗試gmaven-plus,但在運行腳本時仍然會出現錯誤(並訪問項目屬性),如: def String myProp = project.getProperty('myProp') 引起:groovy.lang。 MissingPropertyException:沒有這樣的屬性:System for class:org.apache.maven.project。MavenProject – javdev

+0

@Abhinav我會幫助你的[問題](http://stackoverflow.com/questions/30051201),不需要雙重發布:) – Keegan

-1

這是一個在黑暗中野生刺但你有沒有試圖將Maven「project」屬性綁定到腳本?在你的原始問題有人建議通過使用插值:

def project = ${project} 

但這隻適用於內聯腳本。在你的情況我會嘗試

 <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>execute</goal> 
       </goals> 
       <configuration> 
        <source>${pom.basedir}/src/main/groovy/DeltaCodeGen.groovy</source> 
        <properties> 
         <project>${project}</project> 
        </properties> 
       </configuration> 
      </execution> 
     </executions> 

那麼你很可能把這個在您的實際Groovy代碼: 項目=屬性[「項目」]

我猜測,不知何故腳本運行正在尋找你的腳本的一個項目成員,當然,cmd行的執行不是。所以我會着眼於定義或強制價值。

+0

只是去嘗試,沒有效果。 – ArtB

相關問題