如何使用ProcessBuilder API以编程方式对jar文件进行签名

时间:2015-05-26 12:30:39

标签: java

我们正在开发一个小型Java程序,它将对jar文件进行签名。对于使用jarsigner签名Jar文件,我们使用ProcessBuilder API来创建命令。但是我们在执行它时会遇到错误。

以下是代码段:

String command = "jarsigner -verbose -keystore "%KEYSTORE%" -digestalg SHA1 "%JAR FILE%" "%ALIAS%" -storepass "%PASSWORD%"

ProcessBuilder processBuilder = new ProcessBuilder(command);
Process p = processBuilder.start();

但是在执行时我们将IOException作为响应。

然后我也试过创建String数组: 下面给出的是代码段:

String [] commands = new String [] {" jarsigner"," -verbose" ," -keystore ./sample/xyz.keystore" ," -digestalg SHA1" ," ./ sample / xyz.jar" ,"别名" ,"密码"};

ProcessBuilder processBuilder = new ProcessBuilder(命令); 过程p = processBuilder.start();

输出:显示jarsigner提供的选项,这是提供的参数不正确时的行为。但是,如果我在命令提示符下尝试相同的命令,它可以正常工作。

请使用ProcessBuilder帮助执行命令。

1 个答案:

答案 0 :(得分:0)

根据其docs,ProcessBuilder采用一个字符串数组来指定命令。第一个元素是将要执行的程序,其余的是参数。

这不起作用的另一个原因是ProcessBuilder没有替换环境变量(因为它不知道在任何给定的操作系统上它们会是什么样子)。请改用System.getenv()

这使得数组看起来像这样:

String command[] = { "jarsigner", "-verbose", "-keystore", System.getenv("KEYSTORE"), ... }

要回复您的编辑,您的问题是您需要分开" -keystore"和" ./ sample /.."分为两个数组元素。