【问题标题】:Using JSVC to daemonize a Java app packaged with the Maven One-Jar Plugin使用 JSVC 守护使用 Maven One-Jar 插件打包的 Java 应用程序
【发布时间】:2012-10-12 18:02:45
【问题描述】:

问题来了:

我已使用 Maven plugin 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 运行得很好。

可以做什么?

感谢您的任何见解!

【问题讨论】:

    标签: maven-plugin daemon jsvc onejar


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      当然 Mkyong.com 有a guide on this

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2012-04-01
        • 1970-01-01
        • 2016-05-01
        相关资源
        最近更新 更多