从另一个JAR执行“java -jar”,但使用不同的java版本xD

yi0zb3m4  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(156)

我的项目是使用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可以很好地工作...

kgsdhlau

kgsdhlau1#

该死的,我太蠢了,我只需要使用另一个java.exe而不是"java-jar"
解决办法是:

.\\duk\\jre6\\bin\\java.exe -jar \"duk/DUKIntegrator.jar\" -s

相关问题