2012-10-12 57 views
2

這裏打包Java應用程序的問題是:使用JSVC來守護進程使用Maven一Jar插件

我已經打包我的Java應用程序將使用Maven plugin One-Jar一個罐子。

現在我想使用JSVC(即Apache Commons Daemon)將應用程序作爲Unix守護進程運行。

我使用JSVC如下(工作與Maven的組裝插件做罐等):

jsvc -user $USER -home $HOME -pidfile $PID_PATH -cp $PATH_TO_ONE_JAR my.package.MyClass 

的錯誤是這樣的:

jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader 
jsvc.exec error: Service exit with a return value of 1 

有誰知道這是否是甚至可能一起使用JSVC和One-Jar,因爲One-Jar使用自定義類加載器?當我運行java -jar my-one-jar.jar時,jar運行得很好。

可以做些什麼?

謝謝任何​​見解!

回答

0

我不得不將所有jar依賴項添加到jsvc的classpath選項中。看起來jsvc並不使用另一個罐子裏面的罐子

0

如果你使用(文檔記錄不完整的)Maven Shade Plugin而不是One-jar(它們可以達到類似的結果),它應該可以解決你的問題。它解壓相關的罐子並將類文件直接存儲在脂肪罐中(而不是在罐子裏放入罐子)。我用它來創建一個可執行的jar文件,以便在JSVC下運行並取得一些成功。

當然,事情很少像聽起來那麼簡單。使用Shade插件時,如果依賴關係樹中存在衝突,則可能需要對relocate classes執行一些操作,或使用resource transformers來處理非Java資源文件。但希望不是。

當然 Mkyong.com具有a guide on this

相關問題