79432212

Date: 2025-02-12 07:09:20
Score: 4
Natty:
Report link

I have the same issue, i want to compile different maven proect with different jdk, but it not works, this is my code

@Override
    public void compiler(CompileDTO dto) {
        String originalJavaHome = System.getenv("JAVA_HOME");
        String originalClasspath = System.getenv("CLASSPATH");
        try {
            // 设置新的环境变量
            String newJavaHome = dto.getJdkPath();
            String newClasspath = newJavaHome + "/lib";
            if (newJavaHome != null) {
                System.setProperty("JAVA_HOME", newJavaHome);
                System.setProperty("CLASSPATH", newClasspath);
            } else {
                throw new ServiceException("JDK路径不正确或无法设置环境变量");
            }

            String executeAbleCommand = MavenCommand.EXECUTABLE + newJavaHome + "/bin/javac";
            String classpathCommand = MavenCommand.CLASSPATH + newJavaHome + "/lib";
            MavenCommand.COMMAND.add(executeAbleCommand);
            MavenCommand.COMMAND.add(classpathCommand);
            log.info("开始编译Maven项目,代码路径: {}, 编译参数: {}", dto.getCodePath(), MavenCommand.COMMAND);
            long startTime = System.currentTimeMillis();
            File codeFile = new File(dto.getCodePath());
            if (!codeFile.exists()) {
                throw new ServiceException("代码路径不存在");
            }
            MavenCli cli = new MavenCli();
            System.getProperties().setProperty(MavenCli.MULTIMODULE_PROJECT_DIRECTORY, MavenCli.USER_MAVEN_CONFIGURATION_HOME.getAbsolutePath());

            PrintStream originalErrStream = System.err;
            PrintStream originalOutStream = System.out;

            int statusCode;
            try {
                statusCode = cli.doMain(MavenCommand.COMMAND.toArray(new String[0]), dto.getCodePath(), System.out, System.err);
            } catch (Exception e) {
                throw new ServiceException("执行编译命令失败", e);
            } finally {
                System.setOut(originalOutStream);
                System.setErr(originalErrStream);
            }
            if (statusCode != 0) {
                throw new ServiceException("执行编译命令失败, statusCode: " + statusCode);
            }
            log.info("结束编译Maven项目,编译耗时: {} s", (System.currentTimeMillis() - startTime) / 1000);

        } finally {
            // 恢复原始的环境变量
            if (originalJavaHome != null) {
                System.setProperty("JAVA_HOME", originalJavaHome);
            } else {
                System.clearProperty("JAVA_HOME");
            }
            if (originalClasspath != null) {
                System.setProperty("CLASSPATH", originalClasspath);
            } else {
                System.clearProperty("CLASSPATH");
            }
        }

command log:编译参数: [clean, compile, -Dmaven.test.skip=true, --batch-mode, -T 2C, -Dmaven.compiler.executable=/opt/jdk1.8.0_202//bin/javac, -Dmaven.compiler.classpath=/opt/jdk1.8.0_202//lib]

but log error is: Could not find artifact jdk.tools:jdk.tools:jar:1.6 at specified path /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64/../lib/tools.jar -> [Help 1]

/usr/lib/jvm/java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64/ is internal jdk path, not my jdk path

Reasons:
  • Blacklisted phrase (1): I have the same issue
  • RegEx Blacklisted phrase (1): i want
  • Long answer (-1):
  • Has code block (-0.5):
  • Me too answer (2.5): I have the same issue
  • Low reputation (1):
Posted by: linvaux c