使用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>你可以选择两种修改方式:
- 把依赖调整为适配Java 17的版本,标记为
provided(因为JDK已内置):<dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>17</version> <scope>provided</scope> </dependency> - 直接删除这段依赖(推荐,因为Java 17已经完全内置了
tools.jar的所有功能)。
修改完成后再执行原来的Maven命令即可正常编译。
- 把依赖调整为适配Java 17的版本,标记为
备注:内容来源于stack exchange,提问作者marc nicole




