2011-04-07 126 views
-1

我有一个web应用程序,在jar里面我有一个shell脚本。从该shell脚本中,我想执行另一个jar文件中的java类。 我能够实际执行,在提示中,像这样的我怎么能从另一个罐子里面的shell脚本里面调用一个jar里面的java类

在/ usr/bin中/ JAVA类的罐子bar.foo.a.jar bar.foo.my.class

,但问题是当任务从jar中执行脚本。然后bar.foo.a.jar不在,因为它不是在同一水平

在/ usr /斌/ Java的罐子../../bar.foo.a尝试。 jar bar.foo.my.class

但我不工作,有什么建议我怎么能做到这一点? 有没有更好的方法来做这样的事情?

+1

jar只是一个zip文件。解压或提取shell脚本,然后运行java命令。 – Kevin 2011-04-07 01:52:28

+0

不知道为什么你的解决方案与相对路径不起作用(你没有说当你这样做时会发生什么)。尝试添加一个CD(chdir)到您的脚本。 – jdigital 2011-04-07 02:14:40

回答

1

-jar选项是一种方便的方式来执行一个jar文件内的类,也就是说有一个可执行的jar。但使用-jar文件将忽略用户类路径。

这可能是更容易为你定义适当的CLASSPATH变量,并与

/usr/bin/java -cp $CLASSPATH bar.foo.my.class 
2

它不是从你的问题你有什么实际尝试过明确的执行你的命令,但这里有几个指针。

  • 您无法执行JAR文件中的shell脚本。您必须将其解压缩到文件系统中的独立文件中,然后才能执行它。

  • 您不能使用嵌套在另一个JAR文件内的JAR文件。 (或者至少,您不能创建自定义ClassLoader。)嵌套的JAR文件需要作为独立文件解压缩。

  • 如果您的问题是相对路径,您需要注意“当前目录”在路径解析时的位置。作为一个实验,尝试用JAR文件的绝对路径替换相对路径。

  • -jar选项不适用于这种方式。假设JAR文件确实存在于您所使用的相对位置,你可能需要做:

    /usr/bin/java -cp ../../bar.foo.a.jar bar.foo.MyClass 
    

    -jar选项告诉JVM执行JAR文件的命令,使用宣布的Main-Class在JAR文件的清单中作为入口点。如果你这样做:

    /usr/bin/java -jar ../../bar.foo.a.jar bar.foo.MyClass 
    

    你会发现,bar.foo.MyClass传递给声明主程序作为其第一个命令行参数。


我的建议是花几分钟仔细阅读了java命令说明手册页,jar命令,链接的页面如何在类路径的工作,等等。