为 jpackage 可执行文件定义自定义类路径(和二进制文件夹)

问题描述 投票:0回答:1

我正在尝试使用

jpackage
为我的 Java 应用程序创建 Windows EXE / MSI 文件。总的来说,这是可行的,但是我遇到了一些需要帮助的问题:

  1. 定义自定义类路径: 我浏览了文档,其中说明了如何添加自定义类路径。该文档做了两件事:它使用变量
    $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
功能。

  1. 使用 DLL 文件夹 我的 jar 文件之一是用于 MS SQL 的,我想在其中使用 Active Directory 身份验证。这要求我在路径中(即在环境变量
    Path
    中)有一个特定的DLL。有没有办法让生成的运行时可执行文件查看特定文件夹?
java dll classpath jpackage
1个回答
0
投票

定义自定义类路径

文档中的命令适用于 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
从那里加载它。

© www.soinside.com 2019 - 2024. All rights reserved.