【发布时间】:2010-11-11 03:22:27
【问题描述】:
我有一个由 Maven 构建的应用程序,它是一个混合 Groovy 和 Java 项目。
使用 GMaven 插件 (v1.3),我可以轻松地针对 Java 和 Groovy 类运行 Groovy 测试。在构建应用程序期间,我的 java 类与声明 GroovyObject 方法的增强存根文件链接。
但是,如果我在 Java 中针对应用程序 Groovy 代码编写测试并尝试从 GroovyObject 调用方法,则会出现编译时失败。
有什么解决方法吗? GMaven 是否有任何配置参数可以实现这一点?
谢谢。
这是我的 pom 中的 build.plugins 内容:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<includes>
<include>target/generated-sources/groovy-stubs/main</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<goals>
<goal>generateStubs</goal>
<goal>generateTestStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<!-- providerSelection probably defaults to 1.7 now -->
<providerSelection>1.7</providerSelection>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
这是java测试类:
public class JavaGroovyTest extends TestCase {
@Test
public void testGroovyClasses(){
Model m = new Model(); //Model is an application class written in Groovy
assertNotNull(m);
assertEquals(4,m.getMetaClass().getProperties().size());
}
}
这是编译器的输出:
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
/Users/mkohout/Documents/trunk/src/test/java/JavaGroovyTest.java:[17,24] cannot find symbol
symbol : method getMetaClass()
location: class com.q.Model
【问题讨论】:
-
你看到了哪些编译时失败?
-
毕竟,在实践中,不能从静态编译的 Java 访问大部分 Groovy“运行时元方法”。 - 充其量,四个(!)
GroovyObject方法是可访问的。 - 有其他运行时 Groovy 方法的变通方法,但这是不好的黑客攻击。