java.lang.NoClassDefFoundError: ajavaservice/DemoService



我试图以Windows服务运行Java程序,而我的日志文件显示此错误。我想提供路径有错误,但我无法弄清楚。

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:EclipseJavaServiceprunsrv.exe
REM Service log configuration
set PR_LOGPREFIX=JavaService
set PR_LOGPATH=C:Logs
set PR_STDOUTPUT=C:Logsstdout.txt
set PR_STDERROR=C:Logsstderr.txt
set PR_LOGLEVEL=Error
REM Path to java installation
set PR_JVM=C:Program FilesJavajre7binclientjvm.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

根据StackTrace,prunsrv.exe试图加载一个Java类,其全名为ajavaservice.DemoService,但ClassLoader找不到它。

现在,我看不到您的蝙蝠文件在哪里告诉prunsrv.exe使用该名称。(也许您已经"按摩"了某些东西?也许您的com.service.demoservice.DemoService课程以某种方式指的是它?(

无论哪种方式,解决方案都是为了确保丢失的文件实际上在class路径上。首先,检查您使用的JAR文件是否包含"/ajavaservice/demoservice.class"的条目。(使用" jar -t ..."检查它!(


update

基于评论,这就是问题所在。班级路径是不正确的。显然,它使用了一个不正确的路径名作为JAR,这导致了旧版本的使用。

对于其他有问题的人,如果您得到ClassNotFoundException,请仔细检查您的罐子和类路径。您缺少一些东西。

最新更新