0

我已将我的应用程序从 Eclipse 导出为一个大包,因此它使用 Eclipse 加载程序。我已经使用 install.bat 文件通过 procrun 安装了它,最重要的几行如下所示:

set PR_CLASSPATH=C:\somepath\ECGIServer.jar
set PR_LIBRARYPATH=C:\somepath\native\lunaLibrary.dll
set PR_STARTMODE=jvm
set PR_STOPMODE=jvm

显然还有更多,并且服务确实运行。在 ECGIServer.jar 文件中,这是 Manifest 文件:

Manifest-Version: 1.0
Rsrc-Class-Path: ./ commons-codec-1.6.jar stax-api-1.0-2.jar LunaProvider.jar
Class-Path: .
Rsrc-Main-Class: ecgi.encrypter.ECgiServer
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

有更多的 jar 可以列出,但要写的太多了。无论如何,当我在命令行运行它(ECGIServer.jar)时,它工作得很好。当我将它作为服务运行时,它会一直运行,直到我尝试创建 LunaProvider 的实例。一旦应用程序创建了 LunaProvider 的实例,我得到:

java.lang.NoClassDefFoundError: com/safenetinc/luna/provider/LunaProvider

如您所见,LunaProvider 是一个 ThridParty 库,它刚刚从我的 Eclipse 设置中引入。

4

2 回答 2

0

好吧,最后决定尝试将依赖目录从 Eclipse 导出到单独的目录。完成此操作后,我的所有依赖项,包括 LunaProvider.jar 都被转储到该目录中。我将 install.bat 文件中的以下行更改为:

set PR_CLASSPATH=C:\somepath\ECGIServer.jar;C:\somepath\ECGIServer_lib

一切都很顺利。仍然无法弄清楚为什么。

于 2013-01-03T18:58:17.017 回答
0

我想办法让它工作,是生成 jar 和库文件夹分开。这会生成 .jar 文件和一个名为 YourAppName_lib 的目录。因此,在 .bat 中,您必须将 PR_LIBRARYPATH 设置为 _lib 文件夹,仅此而已。

于 2014-05-13T14:04:53.327 回答