You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:40:22