从GMaven运行脚本导致“没有这样的属性:项目”例外 [英] Running script from GMaven results in "No such property: project" exception

查看:317
本文介绍了从GMaven运行脚本导致“没有这样的属性:项目”例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆