我的项目是使用JDK17制作的,我需要从这个JAR执行另一个JAR(通过cmd命令),问题是对于第二个JAR,我需要JRE〈1.8,我已经尝试了Runtime. getRuntime(). exec(cmd);使用ProcessBuilder,但我无法使其工作。使用的CMD命令如下。我曾尝试将JAVA_HOME临时设置为1.6,但我猜cmd.exe采用了父JAR使用的java。第二个JAR不是我制作的,我无法编辑它...所以我需要使用〈1.8。
String cmd = "set JAVA_HOME="C:\ExtensieImpoziteYCS\duk\jre6\bin" & java -jar "duk/DUKIntegrator.jar" -s P2000 "duk/P2000.xml" "duk/P2000-err.txt" 0 0 $ $ aladdin 5";
Process duk = Runtime.getRuntime().exec(cmd);
duk.waitFor();
duk.destroy();
ProcessBuilder processBuilder = new ProcessBuilder();
try {
Map<String, String> env = processBuilder.environment();
env.put("JAVA_HOME", "C:\\ExtensieImpoziteYCS\\duk\\jre6\\bin\"");
processBuilder.command("cmd.exe", "/c", cmd);
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
int exitVal = process.waitFor();
if (exitVal == 0) {
System.out.println("Success!");
System.out.println(output);
System.exit(0);
} else {
System.out.println(output);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
第二个JAR用于对PDF进行数字签名,由于使用的是旧的JRE,因此在新的JDK上,我得到了以下错误:
java.lang.IllegalAccessException: class pdf.Sign cannot access class sun.security.mscapi.SunMSCAPI (in module jdk.crypto.mscapi) because module jdk.crypto.mscapi does not export sun.security.mscapi to unnamed module @16022d9d
直接从CMD使用JRE 1.6可以很好地工作...
1条答案
按热度按时间kgsdhlau1#
该死的,我太蠢了,我只需要使用另一个java.exe而不是"java-jar"
解决办法是: