这是我的示例程序,使用mvn进行编译时会抛出编译错误,我正在尝试使用ExpandoMetaClass添加静态方法 –
@Singleton class ThrowError { def parse () { println "Anish" } } ThrowError.metaClass.static.getMap = {m_var -> ThrowError.instance.parse(m_var) }
我正在使用gmaven插件来编译项目,同时发出mvn编译
……….
[ERROR] Failed to execute goal org.codehaus.gmaven:gmaven-plugin:1.2:generateStubs (default) on project TestExpandoMetaClass: startup failed: [ERROR] /C:/groovy/ThrowError.groovy: 4 : Invalid duplicate class definition of class ThrowError : The source /C:/groovy/ThrowError.groovy contains at least two definitions of the class ThrowError. **[ERROR] One of the classes is a explicit generated class using the class statement,the other is a class generated from the s cript body based on the file name. Solutions are to change the file name or to change the class name.** [ERROR] @ line 4,column 1. [ERROR] @Singleton [ERROR] ^ [ERROR] [ERROR] 1 error [ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.gmaven:gmaven-plugin:1.2:generate Stubs (default) on project TestExpandoMetaClass: startup failed: /C:/groovyThrowError.groovy: 4: Invali d duplicate class definition of class ThrowError : The source /groovy/ThrowError.groovy contains at least two definitions of the class ThrowError
这是我的pom.xml条目gmaven构建插件条目
<project> ............ ............ <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.1</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.2</version> <configuration> <providerSelection>1.7</providerSelection> </configuration> <dependencies> <dependency> <groupId>org.codehaus.gmaven.runtime</groupId> <artifactId>gmaven-runtime-1.7</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>1.7.2</version> </dependency> </dependencies> <executions> <execution> <goals> <goal>generateStubs</goal> <goal>compile</goal> <goal>generateTestStubs</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> .......... .......... </project>
解决方法
这里的答案与Groovy邮件列表上的答案相同,也许更多的解释可能……在Groovy中我们有脚本和类.类是具有类结构的所有类,如Java.例如,类B {}是类结构并定义了类B.脚本也是类,但它们不在这样的结构中.如果你现在有“class B {}; def b = new B()”,你有一个B类的类结构,还有一个内容为“def b = new B()”的脚本.正如我所说,这也是一个班级,但那个班级的名字是什么?名称由文件名定义,该脚本定义在该文件中(如果没有文件,则选择类似script1456的名称).现在你可以创建一个B.groovy,内容为“class B {}; def b = new B()”.将有一个名为B的类和一个名称相同的脚本.这是一场冲突.
如果您为文件指定其他名称,则完全没问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。