簡體   English   中英

Java Update Jar命令不起作用(使用Runtime.getRuntime()。exec())

[英]Java Update Jar command not working (using Runtime.getRuntime().exec())

因此,我正在制作應該僅制作config.java文件的構建器,並將其配置信息放入其中。 編譯它。 然后使用它更新現有的jar。 我一切正常,沒有任何錯誤,但是當我執行Runtime.getRuntime().exec("jar uf "+out+" "+ cClass); 它似乎失敗了。 我嘗試獲取上述命令的輸出,但未顯示任何內容。 我也嘗試手動執行此操作,效果很好。 所以我的問題是,出什么問題了,我該如何解決?

Runtime.getRuntime().exec("javac "+config);         
File cClass = new File (config.getParentFile().getAbsolutePath() +"/configs.class");
Runtime.getRuntime().exec("jar uf "+out+" "+ cClass);   

Out是要更新的Jar文件,config是config.java cClass是config.class

這是我的整個UpdateJar類

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class cmd extends Thread{
private File out;
private File config;
public cmd(File out, File config){
    this.out = out;
    this.config = config;
    this.start();
}
    public void run(){
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
    try {
        Process p = Runtime.getRuntime().exec("jar uvf "+out+" "+config.getParentFile().getAbsolutePath()+("/configs.class"));
        BufferedReader stdInput = new BufferedReader(new 
                 InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new 
                 InputStreamReader(p.getErrorStream()));
            System.out.println(stdInput.readLine());
            System.out.println(stdError.readLine());
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

它返回的輸出是這樣的:

2013-03-28 20:18:58.363 null
2013-03-28 20:18:58.363 [parsing started RegularFileObject[/Users/jorisbolsens/Desktop/configs.java]]
2013-03-28 20:19:04.364 adding: Users/jorisbolsens/Desktop/configs.class(in = 767) (out= 512)(deflated 33%)
2013-03-28 20:19:04.364 null

出於好奇,我提取了out.jar的所有文件,發現configs.class實際上已放入jar中,只是放入了文件夾中。 具體到users.jorisbolsens.Desktop

我解決了這個問題,這是如此簡單,以至於我一開始不嘗試就感到很愚蠢。 我改變了

Runtime.getRuntime().exec("jar uvf "+out+" "+config.getParentFile().getAbsolutePath()+("/configs.class"));

一部分

Runtime.getRuntime().exec("jar uvf "+out+" -C "+config.getParentFile().getAbsolutePath()+ " configs.class");

現在一切正常。 我要感謝愛立信的所有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM