从GMaven运行脚本导致“没有这样的属性:项目”例外 [英] Running script from GMaven results in "No such property: project" exception
问题描述
tl; dr:在Maven中使用GMaven运行Groovy脚本时,如何解决没有此类属性:项目
错误?我使用的是GMaven 1.5,Groovy 2.2.1。和Java 1.7和Maven 3.1.0。
我有一个Groovy脚本 - DeltaCodeGen
(它没有包) - 生成Java代码(对于Java项目,这是项目中唯一的Groovy)。它曾经是我们会让脚本生成 .java
文件,并且这些文件会被检入,但现在我们正试图让它们在Maven构建期间 generate-sources
阶段。
我可以从我的IDE成功运行脚本,但是当我尝试将它作为构建的一部分运行时, / p>
造成者:org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack:没有这样的属性:class为类的项目:DeltaCodeGen
尽管其他答案,我的脚本没有名为 project
的变量,也没有包含字符串project。它不扩展任何其他脚本。它使用的唯一库是思考(对Servlet API的需求仍然是打开问题)。
运行构建时,我注意到 stderr
(通过运行 mvn -X 2> mvn_err.log
)出现以下错误:
java.lang.NoSuchMethodError:org.codehaus.groovy.runtime.InvokerHelper.getVersion()Ljava / lang / String;
at org.codehaus.gmaven.feature.support.ProviderSupport.asString(ProviderSupport.java:175)org.codehaus.gmaven.runtime.v1_6.ProviderImpl.name(ProviderImpl.java:70)
at org.sql4j.helpers.MessageFormatter.safeObjectAppend(MessageFormatter.java:304)
在org.slf4j.helpers.MessageFormatter.deeplyAppendParameter(MessageFormatter.java:276)
在org.slf4j.helpers.MessageFormatter.arrayFormat(MessageFormatter.java:230)
在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 )
在org.codehaus.gmaven.runtime.loader.DefaultProviderSelector.register(DefaultProviderSelector.java:135)
在org.codehaus.gmaven.runtime.loader.DefaultProviderSelector.select(DefaultProviderSelector.jav a:72)
at org.codehaus.gmaven.runtime.loader.DefaultProviderManager.select(DefaultProviderManager.java:102)
at org.codehaus.gmaven.plugin.ProviderMojoSupport.provider(ProviderMojoSupport.java: 120)
在org.codehaus.gmaven.plugin.ComponentMojoSupport.feature(ComponentMojoSupport.java:49)
at org.codehaus.gmaven.plugin.ComponentMojoSupport.feature(ComponentMojoSupport.java:42)
在org.codehaus.gmaven.plugin.ComponentMojoSupport.doExecute(ComponentMojoSupport.java:53)
在org.codehaus.gmaven.plugin.MojoSupport.execute(MojoSupport.java:71)
在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 .M aven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
处org.apache org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
。 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)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在sun.reflect.DelegatingMethodAccessorImpl.invoke( Delegat (Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:ingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java: 290)
在org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java: 414)
在org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:357)
我的Maven配置是:
<建立>
< plugins>
< plugin>
<! - 请参阅:http://docs.codehaus.org/display/GMAVEN/Executing+Groovy+Code#ExecutingGroovyCode-ExecuteaLocalGroovyScript - >
< groupId> org.codehaus.gmaven< / groupId>
< artifactId> gmaven-plugin< / artifactId>
< version> 1.5< / version>
<执行次数>
<执行>
<阶段> generate-sources< / phase>
<目标>
< goal>执行< / goal>
< /目标>
<配置>
< source> $ {pom.basedir} /src/main/groovy/DeltaCodeGen.groovy</source>
< / configuration>
< /执行>
< /执行次数>
<依赖关系>
< dependency>
< groupId> org.reflections< / groupId>
< artifactId>反射< / artifactId>
< version> 0.9.9-RC1< / version>
< /依赖关系>
< dependency>
< groupId> org.codehaus.groovy< / groupId>
< artifactId> groovy-all< / artifactId>
< version> 2.2.1< / version>
< /依赖关系>
< dependency>
< groupId> javax.servlet< / groupId>
< artifactId> javax.servlet-api< / artifactId>
< version> 3.1.0< / version>
< /依赖关系>
< /依赖关系>
< / plugin>
< / plugins>
< / build>
我终于可以取代 GMaven (已放弃) GMavenPlus (目前正在维护)。
由于运行本地脚本目前并不是以 example ,这是我在POM中的工作:
< plugin>
< groupId> org.codehaus.gmavenplus< / groupId>
< artifactId> gmavenplus-plugin< / artifactId>
< version> 1.0< / version>
<执行次数>
<执行>
<阶段> generate-sources< / phase>
<目标>
< goal>执行< / goal>
< /目标>
<配置>
< scripts>
< script>档案:/ $ {pom.basedir} /src/main/groovy/DeltaCodeGen.groovy</script>
< / scripts>
< / configuration>
< /执行>
< /执行次数>
<依赖关系>
< dependency>
< groupId> org.codehaus.groovy< / groupId>
< artifactId> groovy-all< / artifactId>
< version> 2.2.1< / version>
< /依赖关系>
< /依赖关系>
< / plugin>
tl;dr: How can I resolve the "No such property: project
" error when running a Groovy script from within Maven using GMaven? I'm using GMaven 1.5, Groovy 2.2.1. and Java 1.7, and Maven 3.1.0 .
I have a Groovy script -DeltaCodeGen
(it has no package)- that generates Java code (for a Java project, this is the only Groovy in the project). It used to be that we would have the script generate the .java
files and those would get checked in, but now we are trying to have them built during the Maven build during the generate-sources
phase.
I can run the script successfully from my IDE, but when I try to run it as part of my build I get
Caused by: org.codehaus.groovy.runtime.metaclass.MissingPropertyExceptionNoStack: No such property: project for class: DeltaCodeGen
Despite other answers, my script does not have a variable called project
, nor does contain the string "project" at all. It does not extend any other script. The only library it uses is Reflections (the need for the Servlet API is still an open question).
Running build, I noticed in stderr
(by running mvn -X 2>mvn_err.log
) the following error:
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)
My Maven configuration is:
<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>
What I finally got to work was replacing GMaven(which is abandoned) with GMavenPlus (which is currently maintained).
Since running a local script isn't currently given as an example, this is what has worked for me in my 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>
这篇关于从GMaven运行脚本导致“没有这样的属性:项目”例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!