You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Java 17编译Apache Kylin源码遇Maven依赖错误,求无需降级Java的快速解决方法

Java 17编译Apache Kylin源码遇Maven依赖错误,求无需降级Java的快速解决方法

嗨,我之前也碰到过一模一样的问题!这个错误的根源很清晰:Java 9及更高版本已经彻底移除了tools.jar——它的功能被整合到JDK的系统模块中了,但Kylin的kylin-build-engine模块还在依赖Java 7时代的tools.jar,自然会找不到文件。不用降级Java,给你两个快速可行的解决办法:

  • 方法一:命令行参数快速绕过(无需修改代码)
    直接在你的Maven命令里添加几个编译参数,让Maven调用当前Java 17的编译器工具,而非依赖旧的tools.jar

    mvn clean install -DskipTests -Dmaven.compiler.source=17 -Dmaven.compiler.target=17 -Dmaven.compiler.fork=true
    

    其中-Dmaven.compiler.fork=true是关键,它会让Maven直接调用你当前JDK安装目录下的javac命令,完全绕过对tools.jar的依赖查找。

  • 方法二:修改对应模块的pom.xml(更彻底)
    找到项目中kylin-build-engine模块的pom.xml文件,定位到jdk.tools的依赖配置段:

    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.7</version>
        <scope>system</scope>
        <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
    

    你可以选择两种修改方式:

    1. 把依赖调整为适配Java 17的版本,标记为provided(因为JDK已内置):
      <dependency>
          <groupId>jdk.tools</groupId>
          <artifactId>jdk.tools</artifactId>
          <version>17</version>
          <scope>provided</scope>
      </dependency>
      
    2. 直接删除这段依赖(推荐,因为Java 17已经完全内置了tools.jar的所有功能)。
      修改完成后再执行原来的Maven命令即可正常编译。

备注:内容来源于stack exchange,提问作者marc nicole

火山引擎 最新活动