Java Windows服务-找不到Apache commons守护程序类

Java Windows服务-找不到Apache commons守护程序类,java,windows-services,apache-commons-daemon,Java,Windows Services,Apache Commons Daemon,我有一个Jar文件,需要作为windows服务安装。我使用的是ApacheCommons守护进程ProCurn 虽然该服务出现在任务管理器的“服务”选项卡中,但它没有运行。它处于停止状态,试图启动它似乎不起作用 *在commons守护进程日志中,我注意到它无法加载作为AgentApp的主类 我也安装了32位jre 这里提到的日志文件内容 imageprocagent标准: 2015-01-07 15:47:47 Commons Daemon procrun stderr initialized

我有一个Jar文件,需要作为windows服务安装。我使用的是ApacheCommons守护进程ProCurn

虽然该服务出现在任务管理器的“服务”选项卡中,但它没有运行。它处于停止状态,试图启动它似乎不起作用

*在commons守护进程日志中,我注意到它无法加载作为AgentApp的主类

我也安装了32位jre

这里提到的日志文件内容

imageprocagent标准:

2015-01-07 15:47:47 Commons Daemon procrun stderr initialized
java.lang.NoClassDefFoundError: org/apache/commons/daemon/Daemon
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    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)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.daemon.Daemon
    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)
    ... 12 more
Exception in thread "main" 
克劳福德守护程序:

[2015-01-07 15:47:47] [info]  Commons Daemon procrun (1.0.10.0 32-bit) started
[2015-01-07 15:47:47] [info]  Running 'ImageProcAgent' Service...
[2015-01-07 15:47:47] [info]  Starting service...
[2015-01-07 15:47:49] [error] FindClass com/fx358/fx9/agent/AgentApp failed
[2015-01-07 15:47:49] [error] Failed to start Java
[2015-01-07 15:47:49] [error] ServiceStart returned 4
[2015-01-07 15:47:49] [info]  Run service finished.
[2015-01-07 15:47:49] [info]  Commons Daemon procrun finished
`[2015-01-07 15:47:49][错误]FindClass com/fx358/fx9/agent/AgentApp失败 以下是我用于安装代理的脚本:

SET DISPLAYNAME="ImageProcAgent"
SET DESCRIPTION="FX9 image processing Agent"
SET LOGPATH="C:\FX9\logs\ImageProcAgent"
SET STARTPATH=
SET JVMLOCATION="C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll"
SET CUSTCLASSPATH="C:\FX9\release\ImageProcAgent\GenericAgent_jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent_jar\ImageProcAgent.jar;."
ECHO ON
ImageProcAgent.exe //IS//ImageProcAgent --DisplayName=%DISPLAYNAME% --Description=%DESCRIPTION% --Startup=auto --LogPath=%LOGPATH% --LogLevel=INFO --LogPrefix=crawford-daemon --StdOutput=auto --StdError=auto --StartPath=%STARTPATH% --StartClass=com.fx358.fx9.agent.AgentApp --StartMethod=main --StartParams=start --StartMode=jvm --StopPath=%% --StopClass=com.fx358.fx9.agent.AgentApp  --StopMethod=stop  --StopMode=jvm --Jvm=%JVMLOCATION% --Classpath=%CUSTCLASSPATH% --JvmOptions=-Xmx512M  ++JvmOptions=-Djava.util.logging.config.file=logging.properties
`
有人能指出我做错了什么吗?提前谢谢

我在使用ANT构建可运行的jar时也遇到了同样的错误。服务类失败,并出现严重错误。一个原因是,我使用了签名库SHA1摘要,请检查一下。为了避免这个问题,不要构建可运行的,交付您正在使用的库,并在JAR文件的MANIFEST.MF中设置类路径。希望这对您有所帮助。

我在使用ANT构建可运行的jar时也遇到了同样的错误。服务类失败,并出现严重错误。一个原因是,我使用了签名库SHA1摘要,请检查一下。为了避免这个问题,不要构建可运行的,交付您正在使用的库,并在JAR文件的MANIFEST.MF中设置类路径。希望这对您有所帮助。

我也有同样的错误。事实证明,我试图在服务类中直接使用commons日志和log4j。但是,log4j没有正确初始化,因此导致加载出错


我删除了所有的log4j,用一个简单的System.out.*替换了它,它成功了。

我也有同样的错误。事实证明,我试图在服务类中直接使用commons日志和log4j。但是,log4j没有正确初始化,因此导致加载出错


我删除了所有的log4j,用一个简单的System.out.*替换了它,它成功了。

在类路径声明中,只有2个jar条目:

CUSTCLASSPATH=C:\FX9\release\ImageProcAgent\GenericAgent\u jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent\u jar\ImageProcAgent.jar

应用程序的构建是否是一个包含所有编译和运行时依赖项的胖jar?否则,您必须将服务运行时所需的每个JAR添加到类路径中。例如:

CUSTCLASSPATH=C:\FX9\release\ImageProcAgent\GenericAgent\u jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent\u jar\ImageProcAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent_jar\lib\commons-daemon-1.0.15.jar


此外,使用。在您的服务的类路径中可能不是一个好主意。您应该只使用其中的完全限定路径。否则,您将依赖于Windows执行服务的位置。

在类路径声明中,只有2个jar条目:

CUSTCLASSPATH=C:\FX9\release\ImageProcAgent\GenericAgent\u jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent\u jar\ImageProcAgent.jar

应用程序的构建是否是一个包含所有编译和运行时依赖项的胖jar?否则,您必须将服务运行时所需的每个JAR添加到类路径中。例如:

CUSTCLASSPATH=C:\FX9\release\ImageProcAgent\GenericAgent\u jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent\u jar\ImageProcAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent_jar\lib\commons-daemon-1.0.15.jar

此外,使用。在您的服务的类路径中可能不是一个好主意。您应该只使用其中的完全限定路径。否则,您将依赖于Windows执行服务的位置