使用JSVC来守护使用Maven One-Jar插件打包的Java应用程序

时间:2012-10-12 18:02:46

标签: maven-plugin daemon jsvc onejar

问题在于:

我使用Maven plugin One-Jar将我的Java应用程序打包到一个jar中。

现在我想使用JSVC作为Unix守护进程运行应用程序,即Apache Commons Daemon。

我正在使用JSVC如下(适用于使用Maven程序集插件制作的Jars等):

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运行得很好。

可以做些什么?

感谢您的任何见解!

2 个答案:

答案 0 :(得分:0)

我必须将所有jars依赖项添加到jsvc的classpath选项中。似乎jsvc不使用另一个jar里面的jar

答案 1 :(得分:0)

如果您使用(记录不良)Maven Shade Plugin而不是One-jar(它们可以实现相似的结果),它应该可以解决您的问题。它解压缩依赖的jar并将类文件直接存储在胖Jar中(而不是在jar中使用jar)。我已经用它来创建一个可执行的jar,以便在JSVC下运行并取得一些成功。

当然,事情很少听起来那么简单。使用Shade插件,当您的依赖关系树中存在冲突时,您可能需要对relocate classes执行一些工作,或使用resource transformers来处理非Java资源文件。但希望不是。

当然 Mkyong.com有a guide on this