问题在于:
我使用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运行得很好。
可以做些什么?
感谢您的任何见解!
答案 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)