2011-04-07 94 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命令,鏈接的頁面如何在類路徑的工作,等等。