通过sbt添加Joda-Time时编译错误,但如果我通过我的ide添加它会运行正常吗?

时间:2014-07-06 16:47:45

标签: 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(版本2.3,就像在构建文件中一样)手动下载并添加了jota-time库,一切正常。没有错误。一切都编译并运行。

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

1 个答案:

答案 0 :(得分:3)

将此添加到您的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]了解更多信息