2017-07-31 53 views
1

我有一個罐子裏面包含另一個罐子,我的目標是從全局罐子裏運行這個「內部罐子」。運行從另一個罐子的罐子

我有這種方法,其檢索包含在所述罐子

private static String getRealPathFromResourceName(String fileName) throws IOException { 
    ClassLoader cl = Main.class.getClassLoader(); 
    URL resource = cl.getResource(fileName); 
    String path = resource.getPath(); 
    return path; 
} 

然後我運行jar的完整路徑是:

public static boolean exportFullPeriod(CheckConfiguration checkConfig) throws IOException { 
    final String cmdLine = buildExportCommandLine(checkConfig); 
    try { 
     Process process = Runtime.getRuntime().exec(cmdLine); 
     .... 
    } catch (
     ... 
} 

其中建立exportCommandLine構建使用先前的完整的命令行方法,全部輸出爲:

java -jar file:/C:/Users/xxx/target/module-backup-1.0.jar!/export-1.1.jar -dbUrl jdbc:mysql://localhost:3306/test -dbPassword test -dbUser test 

我得到的錯誤是以下

Error: Unable to access jarfile file:/C:/Users/xxx/target/module-backup-1.0.jar!/export-1.1.jar 

如何引用我的jar中的jar來調用它?

+1

是你嘗試執行依賴的jar tmp的項目嗎?如果是,爲什麼不實際調用jar的main()? –

+0

它不是一個依賴項,我將它作爲資源添加 – Max

+0

好吧。那爲什麼不把它作爲一個庫來添加呢? –

回答

2

java進程不知道如何從jar中提取jar並在內部jar中運行一個類。您將需要將其解壓到外部jar運行的目錄(一個動態變量)。然後根據它創建命令行並最終運行它。

所以,如果你有,有一個條目「someDir/anotherApp.jar」 首先提取物的目錄,說「/u/myapps/tmp/someDir/anotherApp.jar」 /u/myapps/app.jar ,然後從這裏運行它。

有關如何從java打開jar(或zip)文件的信息,請參閱java.util.zip包。

,如果你沒有寫權限「/ U /安裝MyApps的/ tmp /」,然後嘗試使用從System.getProperties()

+0

感謝您的回答,這很有道理。我會和Philipp的回答一起去添加jar作爲maven的依賴 – Max