首页 > 解决方案 > 如何为 JAR 中的程序设置 ABL PROPATH?

问题描述

我有一个 Java (Groovy) CLI 应用程序,它也使用了一些 Progress ABL 代码。应用程序在构建时 (gradle) 被打包到一个可执行的 JAR* 中以供分发。r 代码(编译的 ABL 代码)包含在此 JAR 中。我尝试了多种不同的方式设置 PROPATH,但我无法让它在 JAR 中找到 r-code。即使应用程序本身是从 JAR 内部运行的,是否必须从存档中提取 r 代码才能使用它?从源代码目录运行构建的 JAR 工作正常,但我认为这只是因为源 .p 文件位于文件系统的相对路径中。我怎样才能做到这一点?

将 r-code 与 JAR 打包在一个 tarball 中以进行分发而不是将 r-code 包含在 JAR 本身中是一种更好的方法吗?例如:

场景一:

app.tar.gz
  -app.jar
    -Java/Groovy classes
    -Bundled dependencies
    -rcode/*.r

场景二:

app.tar.gz
  -app.jar
    -Java/Groovy classes
    -Bundled dependencies
  -rcode/*.r

场景 1 导致上述 PROPATH 问题,但我没有测试场景 2。

*即用于$ java -jar app.jar运行构建的应用程序。我打算在 JAR 中包含一个启动 shell 脚本,以便于启动。JAR 主类是编译的 Java,根据输入参数,它将根据需要运行 ABL 过程之一。

标签: javagroovyjaropenedgeprogress-4gl

解决方案


即使应用程序本身是从 JAR 内部运行的,是否必须从存档中提取 r 代码才能使用它?

简短的回答是肯定的,AVM 无法读取除过程库之外的任何存档中的 ABL 代码(源代码和/或 r 代码) 。

将 r-code 与 JAR 打包在一个 tarball 中以进行分发而不是将 r-code 包含在 JAR 本身中是一种更好的方法吗?

如果您使用过程库,则需要将 PL 显式添加到PROPATH. 如果您将(r-)代码部署在(例如)一个 zip 文件中,您可以将其解压缩到 AVM 的工作目录中,并且一切正常。这取决于运行该 ABL 代码的内容,以及工作目录的位置。

使用过程库还有其他好处(与“松散”的 r 代码相反),但我不确定它们在这里是否合适。


推荐阅读