java - 在 jsvc 类路径中使用多个 jar

标签 java daemon jsvc apache-commons-daemon

我正在尝试使用 jsvc 让 Java 应用程序作为 Linux 服务运行。我找到了 How to convert a java program to daemon with jsvc?这能够帮助我完成大部分工作,但我仍在努力弄清楚类路径。

我在 stderr 收到以下错误:

19/04/2013 10:43:18 12233 jsvc.exec error: Cannot find daemon loader org/apache/commons/daemon/support/DaemonLoader

19/04/2013 10:43:18 12231 jsvc.exec error: Service exit with a return value of 1

运行时似乎无法找到 commons-daemon.jar。

我的应用程序的结构使得应用程序本身位于一个 jar 文件中,具有依赖项,包括 lib 目录中的 commons-daemon。

  • daemon-script.sh
  • 我的应用程序.jar
  • lib/commons-daemon.jar
  • lib/其他 jar

这是我的 daemon-script.sh 的相关部分:

LIB_DIR=$(pwd)/lib/*

CLASS_PATH=$(pwd)/myapp.jar

$EXEC -home $JAVA_EXEC -cp $CLASS_PATH:$LIB_DIR -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS

我尝试了多种变体:相对路径,特别是引用 lib/commons-daemon.jar,没有通配符等。有没有人知道如何让它正常工作?

此外,myapp.jar 是一个可自执行的 jar (主要用于测试目的,是的,我仍然需要它作为服务运行),因此 manifest.mf 包含类-路径和主类属性。有没有办法让 jsvc 识别 list ?

最佳答案

您可以在 JSVC 中使用多个 jar,在它们之间使用 :

对于您的具体问题,解决方案是将 CLASS_PATH 变量更改为:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/commons-daemon.jar:$(pwd)/lib/other-jars

或者,您可以使用像这样的通配符将所有 jar 包含在一个目录中:

CLASS_PATH=$(pwd)/myapp.jar:$(pwd)/lib/*.jar

希望对你有帮助

关于java - 在 jsvc 类路径中使用多个 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107878/

相关文章:

java - 太多对象与主键 oracle.jbo.Key 匹配

java - 如何使用xpath检索属性名称中包含冒号的属性值

java - 如果订单有多个,则将数据添加到 hashmap (Java)

c - waitpid - 在哪些情况下 WIFEXITED 和 WIFSIGNALED 都是假的?

spring-boot - apache commons daemon jsvc启动时如何设置嵌套类加载?

Java AES解密: random chars & message at the end

jvm - 使用 Clojure/JVM 的守护进程

MySQL General_log 无法启用。我究竟做错了什么?

linux - Docker 容器作为 Linux 服务?