我正在尝试使用
jpackage
为我的 Java 应用程序创建 Windows EXE / MSI 文件。总的来说,这是可行的,但是我遇到了一些需要帮助的问题:
$APPDIR
和使用 :
分隔符。但是,当我将此指令传递给 jpackage
:--java-options "-cp \$APPDIR/config:\$APPDIR/lib\gson-2.10.1.jar:\$APPDIR/lib\xmlbeans-5.1.1.jar:\$APPDIR/lib\mssql-jdbc-12.4.0.jre8.jar:\$APPDIR/MyApp.jar"
...我在 CFG 文件中得到了这个:
java-options=-Djpackage.app-version=1.0
java-options=-cp
java-options=\/config:\/lib\gson-2.10.1.jar:\/lib\xmlbeans-5.1.1.jar:\/lib\mssql-jdbc-12.4.0.jre8.jar:\/MyApp.jar
如您所见,对 APPDIR 的引用已被删除。因此,当我尝试运行可执行文件时出现错误:
Error: Could not find or load main class path.to.my.MainClass
Caused by: java.lang.ClassNotFoundException: path.to.my.MainClass
分隔符斜杠并不重要 -
/
和 \
具有相同的效果。如果我删除 --java-options
,将从我的 --input
指令中提取路径,并且 MainClass
得到解决。但是,我在我的 config
中看不到 classpath
目录。我知道有一个替代方案发布在这里,但如果可能的话我想使用classpath
功能。
Path
中)有一个特定的DLL。有没有办法让生成的运行时可执行文件查看特定文件夹?定义自定义类路径
文档中的命令适用于 unix shell/平台(也可以通过在类路径中使用
:
来证明)。在 Windows 上,您需要使用 ;
作为路径分隔符。
您还需要防止
$APPDIR
扩展为 shell 变量。在 unix shell 中,这是通过使用 $
转义 \
来完成的,例如在 Windows 的 powershell 中,您可以使用单引号字符串:
--java-options '-cp $APPDIR\config;$APPDIR\lib\gson-2.10.1.jar;$APPDIR\lib\xmlbeans-5.1.1.jar;$APPDIR\lib\mssql-jdbc-12.4.0.jre8.jar;$APPDIR\MyApp.jar'
如果我使用它,它会创建一个
.cfg
文件,其中包含:
java-options=-cp
java-options=$APPDIR\config;$APPDIR\lib\gson-2.10.1.jar;$APPDIR\lib\xmlbeans-5.1.1.jar;$APPDIR\lib\mssql-jdbc-12.4.0.jre8.jar;$APPDIR\MyApp.jar
这就是你想要的。
对于本机 MS SQL 库,您还应该能够使用
--java-options
设置 -Djava.library.path
:
--java-options '-Djava.library.path=$APPDIR'
然后只需将
DLL
文件放入您传递给 --input
的文件夹中,应用程序应该能够使用 System.loadLibrary
从那里加载它。