java.lang.NoClassDefFoundError: ajavaservice/DemoService

Я пытаюсь запустить программу на 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

1 ответ

Согласно трассировке стека, prunsrv.exe пытается загрузить класс Java, полное имя которого ajavaservice.DemoService, но загрузчик классов не может его найти.

Теперь я не вижу, где говорит ваш BAT-файл prunsrv.exe использовать это конкретное имя. (Может быть, вы что-то "массажировали?" com.service.demoservice.DemoService к какому классу это относится?)

В любом случае, решение состоит в том, чтобы убедиться, что отсутствующий файл действительно находится в пути к классам. Для начала убедитесь, что используемый вами JAR-файл содержит запись для "/ajavaservice/DemoService.class". (Используйте "jar -t ...", чтобы проверить это!)


ОБНОВИТЬ

Судя по комментариям, вот в чем проблема. Путь к классу был неверным. Очевидно, он использовал неправильный путь к файлу JAR, из-за чего использовалась старая версия.

Для других людей с такими проблемами: если вы получаете ClassNotFoundException внимательно проверьте свои JAR-файлы и путь к классам. Вы что-то упускаете.

Другие вопросы по тегам