我已将我的应用程序从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-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设置中获取。
答案 0 :(得分:0)
最后决定尝试将依赖目录从Eclipse导出到单独的目录。在我这样做之后,我的所有依赖项,包括LunaProvider.jar都被转储到该目录中。我将install.bat文件中的以下行更改为:
set PR_CLASSPATH=C:\somepath\ECGIServer.jar;C:\somepath\ECGIServer_lib
一切都很顺利。仍然无法弄清楚为什么。
答案 1 :(得分:0)
我想出来使它工作的方式是生成jar和库文件夹分开。这会生成.jar文件和名为YourAppName_lib的目录。 所以在.bat中你必须将PR_LIBRARYPATH设置为_lib文件夹,就是这样。