将Groovy与Java集成

时间:2011-02-25 22:42:15

标签: java xml groovy

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

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

例如,我的Java类是

State(1 Field)
StateDAO

要调用的Groovy脚本基本上解析XML文档,然后使用带有值s的DAO填充表,现在我想要它做的就是将它发布到数据库。

如果您有任何建议,请与我们联系。谢谢!

2 个答案:

答案 0 :(得分:24)

一般来说,有两种方法可以将Groovy与Java集成:

  1. 使Java代码在运行时编译并执行Groovy代码
  2. 编译并打包Groovy代码作为构建的一部分,就像对Java代码一样
  3. 使用1.如果需要“脚本”解决方案,并且要执行的Groovy代码仅在运行时已知。例如,代码可以从数据库加载,或者输入GUI屏幕。如果您只是想通过在Groovy中编写应用程序的某些部分来使您的生活更轻松,请使用2.两个典型的例子,可以快速得到回报的是XML解析和测试(当然还有更多)。

    假设您对2.更感兴趣,可以单独或一起编译Groovy和Java。如果单独编译它们,静态引用只能朝一个方向进行,就像你有两个Java模块一样。如果将它们一起编译,可以任意混合使用Groovy和Java代码,就好像它是同一模块中的所有Java代码一样。

    通过名为联合编译的Groovy编译器功能,可以将Java和Groovy代码编译在一起。遗憾的是,GMaven在联合编译方面存在严重问题,并且没有任何迹象表明这种情况很快就会发生变化。对于较小的项目,你可能会逃脱它,但对于较大的项目,它会咬你(我去过那里)。有解决方案,但它们不是免费的。如果您对(G)Maven替代方案持开放态度,请考虑切换到Gradle,它具有更好的Groovy支持。 (免责声明:我是Gradle的开发人员之一。)

    如果您决定坚持GMaven,请确保正确配置。我看到的几乎每个项目都在这一步都失败了,往往没有意识到。 GMaven文档已过时,但Groovy邮件列表包含有关该主题的几篇帖子。您也可以从Spock(我自己的项目之一)复制配置。

    要启用GMaven联合编译,请添加generateStubs目标。只要你的项目在没有这个目标的情况下编译,就把它留下来。还有一个generateTestStubs目标,但很少需要它。

    这是短篇小说。长话故事,请查看即将出版的Manning书Making Java Groovy。 (我不隶属于作者。)

答案 1 :(得分:5)

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