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