Groovy与Java的集成

o7jaxewo  于 2023-01-07  发布在  Java
关注(0)|答案(3)|浏览(275)

我目前正在致力于将Groovy与现有的Java项目集成。Groovy脚本基本上将XML解析为对象,然后使用现有的DAO来保存、更新等。我有两个项目。一个是Groovy。一个是java。使用Maven(我使用了gmaven插件),我构建了Java,然后构建了Groovy项目。
我希望能够从Java项目调用Groovy脚本,如果需要的话,反之亦然。我确信有一种方法可以做到这一点,但我无法做到这一点。
例如,我的Java类是

State(1 Field)
StateDAO

要调用的Groovy脚本基本上解析XML文档,然后使用值为s的DAO填充表,现在我只希望它将其发布到数据库中。
如果你有什么建议,请告诉我。谢谢!

oiopk7p5

oiopk7p51#

一般来说,有两种方法可以将Groovy与Java集成:
1.使Java代码在运行时编译并执行Groovy代码
1.将Groovy代码作为构建的一部分进行编译和打包,就像对Java代码所做的那样
使用1.如果您需要一个“脚本”解决方案,并且要执行的Groovy代码只在运行时才知道。例如,代码可以从数据库加载,或者输入到GUI屏幕中。如果您只是想通过使用Groovy编写应用程序的某些部分来使您的生活更轻松,两个典型的例子是XML解析和测试(当然还有很多),这样做可以很快得到回报。
假设您对2.更感兴趣,您可以单独编译Groovy和Java,也可以一起编译。如果单独编译它们,静态引用只能在一个方向上进行,就像您有两个Java模块一样。如果一起编译它们,您可以任意混合Groovy和Java代码,就像在同一个模块中的所有Java代码一样。
Groovy编译器的特性 joint compilation 使Java和Groovy代码一起编译成为可能。不幸的是,GMaven在联合编译方面存在严重的问题,而且没有迹象表明这种情况会很快改变。对于较小的项目,你可能会侥幸逃脱,但对于较大的项目,它会咬你一口有一些解决方案,但它们不是免费的。如果你愿意使用(G)Maven的替代品,可以考虑改用Gradle,它对Groovy的支持要好得多。(免责声明:我是Gradle的开发人员之一。)
如果您决定坚持使用GMaven,请确保正确配置它。我看到的几乎每个项目都在这一步失败,通常没有意识到这一点。GMaven文档已经过时,但是Groovy邮件列表包含了几篇关于这个主题的文章。您也可以从Spock(我自己的一个项目)复制配置。
要启用GMaven联合编译,请添加generateStubs目标。只要您的项目编译时没有这个目标,就不要添加它。还有一个generateTestStubs目标,但很少需要。
这是一个小故事。要想了解更长的故事,请查看即将出版的Manning的书Making Java Groovy。(我与作者无关。)

jmo0nnb3

jmo0nnb32#

对于Peter上面的第一个建议,我收集了一些使用Java运行Groovy脚本in a blog post awhile back的示例,这些示例是随code samples on github一起提供的。我还可以支持他关于GMaven和联合编译的评论--它很有效,但最终可能会导致更多的问题比它的价值。+1考虑Gradle以及。虽然我在生产中使用它的大部分经验是Java源代码和Groovy测试代码,但到目前为止,它对我来说工作得完美无缺。

efzxgjgh

efzxgjgh3#

在答案#1中添加GMaven plus的创建,它改进了联合编译过程,并有很好的示例/doc poml files

相关问题