2

这是问题所在:

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

现在我想使用 JSVC 将应用程序作为 Unix Daemon 运行,即 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 运行得很好。

可以做什么?

感谢您的任何见解!

4

2 回答 2

0

我必须将所有 jars 依赖项添加到 jsvc 的类路径选项中。似乎jsvc不使用另一个罐子里的罐子

于 2013-03-15T19:38:53.253 回答
0

如果您使用(文档不足的)Maven Shade Plugin而不是 One-jar(它们可以达到彼此相似的结果),它应该可以解决您的问题。它解压缩依赖的 jar 并将类文件直接存储在 fat Jar 中(而不是在 jar 中包含 jar)。我已经使用它创建了一个在 JSVC 下运行的可执行 jar,并取得了一些成功。

当然,事情很少像听起来那么简单。使用 Shade 插件,当依赖关系树中存在冲突时,您可能需要做一些工作来重新定位类,或者使用资源转换器来处理非 Java 资源文件。但希望不会。

当然Mkyong.com 有这方面的指南

于 2015-05-11T07:50:30.720 回答