【问题标题】:Multiproject SBT build bad symbolic reference scala-reflect runtime多项目 SBT 构建错误的符号引用 scala-reflect 运行时
【发布时间】:2015-10-13 14:48:47
【问题描述】:

我的任务是将旧的 ant 构建脚本重写为 SBT。碰巧的是,我们的套件由 3 个模块组成:

  • Play 2.3 前端网络服务器;
  • 用于从其他各种系统检索数据的后端;
  • 一个中间模块,包含一些用于数据库访问和业务逻辑的共享类。

可以在下面找到我的 Build.scala 文件的摘录:

val sharedSettings = Seq(
  organization        := <organization here>,
  version             := "1.2.5",
  scalaVersion        := "2.11.1",
  libraryDependencies ++= libraries,
  unmanagedJars in Compile ++= baseDirectory.value / "lib",
  unmanagedJars in Compile ++= baseDirectory.value / "src",
  unmanagedJars in Compile ++= baseDirectory.value / "test"
)

lazy val middle = project.settings(sharedSettings: _*)
lazy val back = project.settings(sharedSettings: _*).dependsOn(middle)

但是,当我尝试编译源代码时,出现以下错误:

在类文件“ValueConverter.class”中遇到对 scala.reflect.runtime 的错误符号引用。无法访问包 scala.reflect 中的术语运行时。当前的类路径可能缺少 scala.reflect.runtime 的定义,或者 ValueConverter.class 的编译版本可能与当前类路径中的版本不兼容。

源代码按以下结构组织:

  • 返回
    • 源代码
    • 测试
  • 中间
    • 源代码
    • 测试
  • 正面
    • 源代码
    • 测试

这里每个 lib 文件夹都包含一些手动维护的库(这就是我们要迁移到 sbt 的原因)。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您是否将 scala-reflect 声明为库依赖项?
  • 有什么理由使用 Scala 2.11.1 而不是 2.11.7? ValueConverter 来自哪里 - 它是手动维护的库之一吗?可能它是针对像 2.10 这样的旧 Scala 版本编译的?这里的关键不是“缺少 scala.reflect.runtime”(正如您的标题所暗示的那样),而是 错误的符号引用
  • 我尝试将反射添加为依赖项,但不幸的是没有帮助。
  • 我根据你的建议改了标题。我使用的是 2.11.1,因为那是我们之前使用的版本。我不想一次更改太多设置。 (我尝试将其更改为 2.11.7,但没有帮助。) ValueConverter 类确实是库(扇贝)的一部分。使用的版本是针对版本 2.11.0 编译的。将 scala 版本更改为 2.11.0 也无济于事。 :(

标签: scala sbt scala-reflect


【解决方案1】:

最后,我放弃了让编译器理解附加库的尝试。最终,我将那些使用 sbt 可用的依赖项添加到 sbt 托管库中。这显然运作良好。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2023-04-10
    • 1970-01-01
    • 2018-05-27
    • 2016-10-01
    • 2018-03-20
    • 2018-01-13
    • 2014-08-26
    • 1970-01-01
    相关资源
    最近更新 更多