java.lang.NoClassDefFoundError:ajavaservice/DemoService

java.lang.NoClassDefFoundError:ajavaservice/DemoService,java,windows,eclipse,service,apache-commons-daemon,Java,Windows,Eclipse,Service,Apache Commons Daemon,我试图将Java程序作为Windows服务运行,我的日志文件显示了此错误。我想在提供路径时有一个错误,但我无法找出它 2017-06-27 15:43:21 Commons Daemon procrun stderr initialized java.lang.NoClassDefFoundError: ajavaservice/DemoService Caused by: java.lang.ClassNotFoundException: ajavaservice.DemoS

我试图将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

根据stacktrace,
prunsrv.exe
试图加载一个全名为
ajavaservice.DemoService
的Java类,但类加载器找不到它

现在,我看不到您的BAT文件告诉
prunsrv.exe
使用该特定名称的位置。(也许你“按摩”了什么?也许你的
com.service.demoservice.demoservice
类以某种方式引用了它?)

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


更新

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


对于其他有类似问题的人:如果您遇到
ClassNotFoundException
异常,请仔细检查JAR和类路径。您缺少了一些内容。

事实上,我以前将我的包命名为ajavaservice,后来将其更改为com.service.demoservice.demoservice。但错误仍然使用ajavaservice。“FindClass ajavaservice/DemoService失败”是否重新编译?你创建了一个新的罐子吗?您是否将其部署到您尝试使用它的位置?BAT文件呢?是的,我通过重写修改了旧jar。是的,我将jar和批处理文件放在各自的文件夹中。我的服务是“开始”,挂在那里。我也增加了servicepipetime,但这里有些东西没有加起来。你说你更改了包名。你说你更新了一切。然而。。。某些程序仍在尝试使用包的旧名称。是的,这也让我困惑,所以我制定了一个全新的项目。它仍然给出findclass错误和相同的java.lang.NoClassDefFoundError。如何避免此错误?