【问题标题】:Packaging a Groovy application打包 Groovy 应用程序
【发布时间】:2013-08-23 14:08:53
【问题描述】:

我想以一种易于分发的形式打包 Groovy CLI 应用程序,类似于 Java 对 JAR 所做的事情。我还没有找到任何似乎能够做到这一点的东西。我发现了一些类似 this 的东西,它们是用于一次性脚本的,但没有任何东西可以编译由大量单独的 Groovy 文件和资源数据组成的整个 Groovy 应用程序。

我不一定需要将 Groovy 独立可执行文件作为其中的一部分(尽管那会很好),而且这不是一个旨在供其他 JVM 语言使用的库。我想要的只是我的应用程序的简单打包版本。

编辑: 根据我收到的几个回复,我认为我的目标不够明确。我正在寻找的基本上是 Groovy 可以支持的存档格式。这里的目标是使它更容易分发。现在,最好的方法是压缩它,让用户解压缩它,然后修改一个批处理/shell 文件来启动它。我希望找到一种方法,让它更像一个可执行的 JAR 文件,用户只需要运行一个文件。

我知道 Groovy 可以编译为与 JVM 兼容的字节码,但我并不想让它作为 Java 代码运行。我正在根据用户的配置在运行时动态添加 Groovy 类,而 Java 将无法处理。正如我在原始帖子中所说,将 Groovy 可执行文件包含在存档中是一种不错的选择。但是,我确实需要 Groovy 才能运行,而不是 Java。

【问题讨论】:

  • 为什么不像使用 Java 那样创建应用程序的 jar 并将其与所需的 Groovy jar(以及您依赖的 jar)一起分发?

标签: groovy compilation


【解决方案1】:

Gradle Cookbook 展示了如何从一个 groovy 项目中制作一个“胖罐子”:http://wiki.gradle.org/display/GRADLE/Cookbook#Cookbook-Creatingafatjar

这捆绑了所有依赖项,包括 groovy。生成的 jar 文件可以在命令行上运行,例如:

java -jar myapp.jar

【讨论】:

  • 查看我对布赖恩回答的评论。如果我需要一个与 Java 兼容的 JAR,这会起作用,但这不是我想要的。
【解决方案2】:

结合使用eclipse Fat Jar pluginYet Another Java Service Wrapper,我取得了很大的成功。

本质上,这变成了一个“Java”问题,而不是一个常规问题。 Fat Jar 使用起来无痛。您可能需要多次尝试才能使您的单个 jar 正确,但是一旦将所有依赖项扁平化到一个 jar 中,您现在就可以使用

在命令行中运行它了
java -jar application.jar

然后我将这些罐子包装为服务。我经常开发独立的基于 groovy 的服务来执行某些任务。我使用 Yet Another Java Service 将其设置为 Windows 服务器上的服务,并使用各种技术安排它与 Windows 服务交互。

【讨论】:

  • 这似乎接近我正在寻找的内容,但我在应用程序中进行了一些高级操作。您可以将其配置为使用用户在运行时定义的 Groovy 类,因此我相当确信 Groovy 仍然需要成为运行我的应用程序的可执行文件,而不是 Java。
  • 我在此部署中使用了 Groovy 在 String 上引入的方法,因此我认为它与您自己的类上的元编程没有任何不同。比较字符串的 JDK 文档:Java - docs.oracle.com/javase/6/docs/api Groovy - groovy.codehaus.org/groovy-jdk/java/lang/…
  • Groovy 类在纯文本 Groovy 脚本中定义并在运行时提供。 Groovy 代码中的任何内容,包括元类内容,在编译时都可以编译为 JVM 字节码,但这是不同的。用户必须将他们的脚本编译成 .class 文件才能与 Java 一起使用。使用 Groovy,您只需将纯文本脚本添加到类路径,这很棒,我想保留这种行为。
猜你喜欢
  • 2016-10-07
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 2016-09-29
  • 2014-08-20
相关资源
最近更新 更多