我们正在开发一个小型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帮助执行命令。
答案 0 :(得分:0)
根据其docs,ProcessBuilder采用一个字符串数组来指定命令。第一个元素是将要执行的程序,其余的是参数。
这不起作用的另一个原因是ProcessBuilder没有替换环境变量(因为它不知道在任何给定的操作系统上它们会是什么样子)。请改用System.getenv()。
这使得数组看起来像这样:
String command[] = { "jarsigner", "-verbose", "-keystore", System.getenv("KEYSTORE"), ... }
要回复您的编辑,您的问题是您需要分开" -keystore"和" ./ sample /.."分为两个数组元素。