scala - 通过 sbt 添加 Joda-Time 时出现编译错误,但如果我通过 ide 添加它则运行正常?

标签 scala sbt

我正在努力养成使用构建工具的习惯。然而,sbt 给我带来了一些麻烦,我对它还不够了解,无法解决问题的原因。

我正在尝试将 JotaTime 作为依赖项添加到我的项目中。

我的build.sbt完整如下:

name := "MyProject"

libraryDependencies += "joda-time" % "joda-time" % "2.3"

现在,它似乎找到了该库并顺利完成更新。我可以开始在我的 IDE 中使用 joda-time 了。我可以导入模块、自动完成工作等。但是,一旦我尝试实际运行该项目,我就会收到以下错误:

Error:scalac: error while loading LocalDateTime, class file 'C:\Users\myname\.ivy2\cache\joda-time\joda-time\jars\joda-time-2.3.jar(org/joda/time/LocalDateTime.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 10 at byte 42)

有问题的确切代码是这样的:

def main(args: List[String]) = {
    println(new LocalDateTime(System.currentTimeMillis))
}

尝试解决这个问题。我从 build.sbt 中删除了依赖行,而是通过 IDE 手动下载并添加了 jota-time 库(版本 2.3,就像在构建文件中一样),一切正常。没有错误。一切都编译并运行。

什么会导致 sbt 下载的 JodaTime 版本损坏?

最佳答案

将其添加到您的 build.sbt 中:

libraryDependencies += "org.joda" % "joda-convert" % "1.6"

或者这样写:

libraryDependencies ++= Seq( "joda-time" % "joda-time"    % "2.3"
                           , "org.joda"  % "joda-convert" % "1.6"
                           )

无论哪种风格都取决于你,但这应该可以解决问题。

Joda-Time 需要 Joda-Convert 在 Scala 中工作,不要问我为什么,它就是这样。

看[ here ] 了解更多信息

关于scala - 通过 sbt 添加 Joda-Time 时出现编译错误,但如果我通过 ide 添加它则运行正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24598115/

相关文章:

Scala:类型模式匹配的简写?

java - 立即转换 Spark 数据帧现有架构

scala - 并非所有 akka 流接收器都会接收发出的数据

scala - 避免丢失返回值中的类型信息

sbt - 为什么和/或何时避免使用transitive()或inTransitive()?

scala - "Cannot prove that Object <:< Try[U]"在扁平化函数中

java - sbt中核心库的约束

scala - Unresolved `reSTLet` sbt 依赖性

sbt - 如何在子项目中使用 sbt 原生打包器 (sbt 0.13)

java - 使用 settings.xml 解决 sbt 的 java Artifact