一般来说,有适用于集成Java Groovy的两种方法:
- 使Java代码编译并在运行时
执行Groovy代码
- 编译和打包Groovy代码作为构建的一部分,就像你可以使用Java代码
使用1.如果您需要“脚本”解决方案,并且只有在运行时才知道要执行的Groovy代码。例如,代码可以从数据库加载,或输入到GUI屏幕中。如果您只是想通过在Groovy中编写应用程序的某些部分来简化您的工作,请使用2.使用XML解析和测试的两个典型示例(当然还有更多)。
假设您对2.更感兴趣,您可以分别编译Groovy或Java,也可以一起编译Java。如果单独编译它们,静态引用只能朝一个方向进行,就像有两个Java模块一样。如果将它们编译在一起,可以任意混合使用Groovy和Java代码,就好像它是同一模块中的所有Java代码一样。
通过称为联合编译的Groovy编译器功能,可以将Java和Groovy代码编译在一起。不幸的是,GMaven在联合编辑方面存在着严重的问题,并且没有迹象表明这种情况很快就会改变。对于小型项目你可能会得到它,但对于大型项目它会咬你(我去过那里)。有解决方案,但它们不是免费的。如果您对(G)Maven开放源代码开放,请考虑切换到Gradle,它具有更好的Groovy支持。 (免责声明:我是Gradle的开发人员之一。)
如果您决定坚持GMaven,请确保正确配置其配置。几乎我看到的每一个项目在这一步都失败了,往往没有意识到这一点。 GMaven文档已过时,但Groovy邮件列表包含有关该主题的多篇文章。您也可以从Spock(我自己的项目之一)复制配置。
要启用GMaven联合编译,请添加generateStubs
目标。只要你的项目在没有这个目标的情况下编译,就离开它。还有一个generateTestStubs
的目标,但它很少需要。
这是短篇小说。长话短说,看看即将到来的曼宁书Making Java Groovy。 (我不隶属于作者。)
您是否使用过groovy-eclipse-compiler进行联合编译?它挂接到maven-compiler-plugin。 – 2011-08-09 15:01:44