1

我正在尝试将 Java 程序作为 Windows 服务运行,而我的日志文件显示此错误。我想提供路径时有错误,但我无法弄清楚。

2017-06-27 15:43:21 Commons Daemon procrun stderr initialized
    java.lang.NoClassDefFoundError: ajavaservice/DemoService 
Caused by:
    java.lang.ClassNotFoundException: ajavaservice.DemoService  
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

我的批处理文件

set SERVICE_NAME=JavaService
set PR_INSTALL=C:\Eclipse\JavaService\prunsrv.exe

REM Service log configuration
set PR_LOGPREFIX=JavaService
set PR_LOGPATH=C:\Logs
set PR_STDOUTPUT=C:\Logs\stdout.txt
set PR_STDERROR=C:\Logs\stderr.txt
set PR_LOGLEVEL=Error

REM Path to java installation
set PR_JVM=C:\Program Files\Java\jre7\bin\client\jvm.dll
set PR_CLASSPATH=DemoService1.jar

REM Startup configuration
set PR_STARTUP=auto
set PR_STARTMODE=jvm
set PR_STARTCLASS=com.service.demoservice.DemoService
set PR_STARTMETHOD=start

REM Shutdown configuration
set PR_STOPMODE=jvm
set PR_STOPCLASS=com.service.demoservice.DemoService
set PR_STOPMETHOD=stop

REM JVM configuration
set PR_JVMMS=256
set PR_JVMMX=1024
set PR_JVMSS=4000
set PR_JVMOPTIONS=-Duser.language=DE;-Duser.region=de

REM Install service
prunsrv.exe //IS//JavaService
4

1 回答 1

1

根据堆栈跟踪,prunsrv.exe正在尝试加载全名为 的 Java 类ajavaservice.DemoService,但类加载器找不到它。

现在,我看不到您的 BAT 文件在哪里prunsrv.exe使用该特定名称。(也许你已经“按摩”了一些东西?也许你的com.service.demoservice.DemoService班级以某种方式提到了它?)

无论哪种方式,解决方案都是确保丢失的文件实际上位于类路径中。首先,检查您正在使用的 JAR 文件是否包含“/ajavaservice/DemoService.class”条目。(使用“jar -t ...”来检查它!)


更新

根据评论,这就是问题所在。类路径不正确。它显然为 JAR 使用了不正确的路径名,从而导致使用旧版本。

对于遇到此类问题的其他人:如果您ClassNotFoundException仔细检查您的 JAR 和您的类路径。你错过了一些东西。

于 2017-06-27T11:14:28.713 回答