Scala 2.12项目升级Java 17遇/packages无法转为URI错误求助
解决Scala 2.12 + Java 17编译
/packages cannot be represented as URI错误的思路 匹配Gradle Scala插件与Zinc版本
Zinc 1.8.0需要搭配较新的Gradle Scala插件(建议Gradle 7.x+对应的插件版本),旧插件无法正确加载指定的Zinc版本。可在build.gradle.kts中明确指定插件版本:plugins { id("scala") version "7.6.2" // 选择与当前Gradle版本兼容的最新Scala插件 }同时确保Gradle本身升级到7.x或更高版本,低版本Gradle对Java 17和新Zinc的支持存在缺陷。
添加Java 17模块兼容性JVM参数
该错误源于Java 9+模块系统下,旧版Scala编译器无法处理/packages特殊路径,需在编译和测试任务中添加开放模块的参数:// 针对Scala编译任务 tasks.withType<ScalaCompile> { options.compilerArgs.addAll(listOf( "-J--add-opens=java.base/java.lang=ALL-UNNAMED", "-J--add-opens=java.base/java.io=ALL-UNNAMED", "-J--add-modules=ALL-SYSTEM" )) } // 针对测试任务 tasks.withType<Test> { jvmArgs.addAll(listOf( "--add-opens=java.base/java.lang=ALL-UNNAMED", "--add-opens=java.base/java.io=ALL-UNNAMED" )) }统一Scala依赖版本
即使升级了Scala编译器补丁版本,项目中旧版的scala-library、scala-reflect等依赖仍可能引发兼容性问题,需强制统一所有Scala相关依赖的版本:configurations.all { resolutionStrategy.force("org.scala-lang:scala-library:2.12.18") // 使用2.12最新补丁版 resolutionStrategy.force("org.scala-lang:scala-reflect:2.12.18") }排查增量编译缓存问题
增量编译的缓存可能残留旧状态,尝试临时禁用增量编译验证:tasks.withType<ScalaCompile> { options.incremental = false }若禁用后错误消失,执行
./gradlew clean清除缓存后,可重新启用增量编译。检查自定义任务与第三方插件冲突
项目中若存在自定义Scala编译任务或第三方Scala相关插件,可能会覆盖Zinc版本或编译参数,需排查这些组件是否兼容Java 17和Zinc 1.8.0,必要时替换或移除冲突插件。
内容的提问来源于stack exchange,提问作者Jewels
相关产品推荐
相关产品推荐

