在jsvc类路径中使用多个jar

时间:2013-04-19 15:13:41

标签: 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错误:找不到守护进程加载器org / apache / commons / daemon / support / DaemonLoader

     

19/04/2013 10:43:18 12231 jsvc.exec错误:服务退出,返回值为1

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

我的应用程序是结构化的,以便应用程序本身在一个jar文件中,具有依赖项,包括lib目录中的commons-daemon。

  • daemon-script.sh
  • myapp.jar
  • LIB /公地daemon.jar
  • LIB /另一罐

以下是我的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包含Class- Path和Main-Class属性。有没有办法让jsvc识别清单?

1 个答案:

答案 0 :(得分:2)

您可以在JSVC中使用多个罐子,使用

对于您的特定问题,解决方案是将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

希望这有帮助