java - 如何为 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 过程之一。
解决方案
即使应用程序本身是从 JAR 内部运行的,是否必须从存档中提取 r 代码才能使用它?
简短的回答是肯定的,AVM 无法读取除过程库之外的任何存档中的 ABL 代码(源代码和/或 r 代码) 。
将 r-code 与 JAR 打包在一个 tarball 中以进行分发而不是将 r-code 包含在 JAR 本身中是一种更好的方法吗?
如果您使用过程库,则需要将 PL 显式添加到PROPATH
. 如果您将(r-)代码部署在(例如)一个 zip 文件中,您可以将其解压缩到 AVM 的工作目录中,并且一切正常。这取决于运行该 ABL 代码的内容,以及工作目录的位置。
使用过程库还有其他好处(与“松散”的 r 代码相反),但我不确定它们在这里是否合适。
推荐阅读
- python - 如何将 Python 代码混合到 Python 扩展模块中
- php - 如何处理 WordPress 插件中的 URL?
- android - 如何在安卓平板和Linux系统之间同步日期、时间和时区?
- phpspreadsheet - PHPSpreadsheet - 编写 htmlentities / 转换成相应的字符
- powershell - 快速获得多台机器的服务
- python - 在 python 中打开 xlsx(从开放办公室)
- r - 在一张图上绘制 3 个不同的数据
- docker - docker.service 的 Dockers 作业失败,因为控制进程在 redhat linux 上以错误代码退出
- android - Android 通过 AlarmManager 和 Calendar.DAY_OF_WEEK 设置多个闹钟
- html - 在 div 元素周围创建高亮,其中高亮元素具有白色填充和彩色边框