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

时间:2013-03-28 02:10:17

标签: java command-line jar runtime

所以我正在创建这个构建器,它应该简单地创建一个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具体。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这很简单,我觉得起初没有尝试过这个真的很蠢。我改变了

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

部分到

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

现在一切都很完美。我要感谢ericson的所有帮助。