实战 Groovy: 在 Java 应用程序中加一些 Groovy 进来
2009-11-19 00:00:00 来源:WEB开发网正如您所看到的,脚本非常简单,对于像我这样的人来说特别有用。而我要做的全部工作只是把某个具体的目录名传递给它,然后我就会得到该目录中每个 MP3 文件的相关信息(艺术家名称、歌曲名称和专辑) 。
现在让我们来看看,如果要把这个干净的脚本集成到一个能够通过数据库组织音乐甚至播放 MP3 的普通 Java 程序中,我需要做些什么。
Class 文件是类文件
正如前面讨论过的,我的第一个选项可能只是用 groovyc 编译脚本。在这个例子中,我期望 groovyc 创建 至少 两个 .class 文件 —— 一个用于 Song 类,另一个用于 Song 声明之后的脚本代码。
实际上,groovyc 可能创建 5 个 .class 文件。这是与 Songs.groovy 包含三个闭包有关,两个闭包在 getSongsForDirectory() 方法中,另一个在脚本体中,我在脚本体中对 Song 的集合进行迭代,并调用 println。
因为 .class 文件中有三个实际上是 Song.class 和 Songs.class 的内部类,所以我只需要把注意力放在两个 .class 文件上。Song.class 直接映射到 Groovy 脚本中的 Song 声明,并实现了 GroovyObject,而 Songs.class 则代表我在定义 Song 之后编写的代码,所以也扩展了 Script。
此时此刻,关于如何把新编译的 Groovy 代码集成到 Java 代码,我有两个选择:可以通过 Songs.class 文件中的 main() 方法运行代码 (因为它扩展了 Script),或者可以将 Song.class 包含到类路径中,就像在 Java 代码中使用其他对象一样使用它。
变得更容易些
通过 java 命令调用 Songs.class 文件非常简单,只要您记得把 Groovy 相关的依赖关系和 Groovy 脚本需要的依赖关系包含进来就可以。把 Groovy 需要的类全都包含进来的最简单方法就是把包含全部内容的 Groovy 可嵌入 jar 文件添加到类路径中。在我的例子中,这个文件是 groovy-all-1.0-beta-10.jar。要运行 Songs.class,需要记得包含将要用到的 MP3 库(jid3lib-0.5.jar>),而且因为我使用 AntBuilder,所以我还需要在类路径中包含 Ant。清单 4 把这些放在了一起:
更多精彩
赞助商链接