我有一个Web应用程序,在jar中我有一个shell脚本。从那个shell脚本我想执行另一个jar文件中的java类。 我可以在提示符中实际执行像这样的类
/ usr / bin / java -jar bar.foo.a.jar bar.foo.my.class
但问题是当一个任务从jar内部执行脚本时。然后找不到bar.foo.a.jar,因为它不在同一级别
我试过
/ usr / bin / java -jar ../../bar.foo.a.jar bar.foo.my.class
但我不行,有什么建议我怎么能实现这个? 有没有更好的方法来做这样的事情?
答案 0 :(得分: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
命令以及描述类路径如何工作的链接页面等。< / p>
答案 1 :(得分:1)
-jar
选项是在jar文件中执行类的一种方便方法,也就是具有可执行jar。但是使用-jar文件将忽略用户类路径。
您可能更容易定义正确的类路径变量并使用
执行命令/usr/bin/java -cp $CLASSPATH bar.foo.my.class