2015-01-07 41 views
2

我有一個Jar文件需要作爲Windows服務安裝。我正在使用Apache commons守護進程procrun。Windows服務 - Apache commons守護進程類未找到

雖然該服務出現在任務管理器中的服務選項卡中,但未運行。它處於停止狀態並試圖啓動它似乎不起作用。

*在commons守護進程日誌中,我注意到它無法加載「AgentApp」主類。

我也安裝了32bit 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年1月7日十五時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 

` 有人可以指出我做錯了什麼嗎?提前致謝。

回答

-1

我與使用ANT構建可運行jar的錯誤相同。服務級別失敗並出現嚴重錯誤。其中一個原因是,我使用了簽名庫SHA1-Digest,請檢查它。爲避免此問題,請不要構建可運行的程序,交付您正在使用的庫,並在JAR文件的MANIFEST.MF中設置Class-Path。希望這可以幫助你。

0

我有同樣的錯誤。原來,我試圖直接在Service類中使用commons-logging和log4j。但是,log4j沒有正確初始化,從而導致負載出錯。

我刪除了所有的log4j,用一個簡單的System.out。*代替它,它工作。

0

在CLASSPATH聲明只有2個罐子條目:

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

是應用程序的您的構建爲包含所有脂肪-JAR編譯和運行時依賴?否則,您將不得不在您的服務運行時將每個需要的JAR添加到類路徑中。例如:

CUSTCLASSPATH="C:\FX9\release\ImageProcAgent\GenericAgent_jar\GenericAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent_jar\ImageProcAgent.jar;C:\FX9\release\ImageProcAgent\GenericAgent_jar\lib\commons-daemon-1.0.15.jar;<PROBABLY_MORE_JARS_NEED_TO_BE_ADDED_HERE>;."

而且使用你的服務的類路徑.可能不是一個好主意。你應該只在那裏使用完全合格的路徑。否則,您將依賴於Windows執行服務的位置。