我目前正在将Groovy与现有的Java项目集成在一起。Groovy脚本主要是将XML解析成对象,然后使用现有的DAO来保存、更新等。一个很棒的。一个java。使用Maven (我使用了gmaven插件),我先构建Java,然后构建Groovy项目。
如果需要,我希望能够从Java项目调用Groovy脚本,反之亦然。我相信有办法做到这一点,但我无法做到这一点。
例如,我的Java类是
State(1 Field)
StateDAO将要调用的Groovy脚本基本上解析一个XML文档,然后使用DAO使用值s填充表,目前我希望它做的就是将其发送到数据库。
如果你有什么建议,请告诉我。谢谢!
发布于 2011-02-26 14:00:54
一般来说,有两种方法可以将Groovy与Java集成:
Groovy代码在runtime
所做的那样
如果您需要一个“脚本”解决方案,并且要执行的Groovy代码只有在运行时才知道,请使用1.例如,代码可以从数据库加载,也可以在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目标,但很少需要它。
这就是短篇故事。长话短说,看看曼宁即将出版的新书Making Java Groovy。(我与作者没有任何关系。)
发布于 2011-02-27 01:10:56
对于Peter上面的第一个建议,我收集了一组使用Java运行code samples on github附带的Groovy脚本in a blog post awhile back的示例。我也可以支持他关于GMaven和联合编译的评论-这是可行的,但最终可能会造成比它更多的问题。+1也考虑Gradle。虽然我在生产中使用它的大部分经验都是使用Java源代码和Groovy测试代码,但到目前为止,它对我来说工作得很完美。祝你好运!
https://stackoverflow.com/questions/5123516
复制相似问题