2011-02-25 57 views
8

我目前正在将Groovy与现有Java项目集成。 Groovy脚本基本上将XML解析为对象,然后将使用现有的DAO来保存,更新等。我有2个项目。一个时髦。一个java。使用Maven(我使用了gmaven插件),我构建了Java,然后构建了Groovy项目。将Groovy与Java集成

我希望能够从Java项目中调用Groovy脚本,反之亦然(如果需要的话)。我确信有办法做到这一点,但我无法做到这一点。

例如我的Java类

State(1 Field) 
StateDAO 

的Groovy脚本得到根本称为解析XML文档,然后填充使用DAO与价值,S一张桌子和现在的一切我都样子的do将其发布到数据库中。

如果您有任何建议,请让我知道。谢谢!

回答

24

一般来说,有适用于集成Java Groovy的两种方法:

  1. 使Java代码编译并在运行时
  2. 执行Groovy代码
  3. 编译和打包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。 (我不隶属于作者。)

+0

您是否使用过groovy-eclipse-compiler进行联合编译?它挂接到maven-compiler-plugin。 – 2011-08-09 15:01:44

5

对于上面的Peter的第一个建议,我将使用Java的示例集合起来运行Groovy脚本in a blog post awhile back,它与code samples on github一起提供。 我也可以支持他关于GMaven和联合编辑的评论 - 它可行,但最终会导致更多的问题而不是价值。 +1也考虑到了Gradle。虽然我大部分使用Java进行生产的经验都来自于Java源代码和Groovy测试代码,但迄今为止,它对我来说是完美无缺的。 祝你好运!