【发布时间】:2013-08-22 19:43:29
【问题描述】:
编辑:
版本信息,截至 2013 年 1 月 27 日:
Scala 2.10.0
IntelliJ IDEA Leda 123.139 (EAP)
Scala Plugin version 0.7.108 (Nightly Build)
JDK 7u11
Joda Time 2.1
ScalaJ-Time 2.9.1-0.6
我已经放弃尝试使用 SBT,因为我没有看到任何进展 - 我不知道如何结合 IntelliJ 和 SBT,经过几个小时的尝试,我终于回到了我最初开始的地方。
我的 JodaTime 库包含 Scalaj-Time jar:
我尝试了几乎所有的设置组合,从联合编译(首先是 Scala,然后是 Java 和 vv),外部构建,到 提升我的依赖项中的 Scala 库上的 JodaTime 库(是的,我什至已经这样做了),以及 使缓存无效。我得到的只是一堆错误——无论我是“制作”项目、“运行”当前文件还是“编译”它——都是随机产生的。而且,有时,它会起作用。是的,尽管听起来很愚蠢,但这种行为是那个未定义的。我不确定是什么原因造成的。我统计了出现的3条不同的错误信息,我会把它们上传到pastie.org,否则会占用太多空间:http://pastie.org/pastes/5887847/text。
我没有尝试过的:回到前面任何应用程序/库的早期版本,深入了解SBT(我觉得不值得)。
我对这个帖子有什么期望?我希望有人为这个问题提供一个可靠的解决方案,在最好的情况下,不会提及任何 SBT (可选)。
另外,旁注:为什么 Joda-Time 以损坏的格式发布他们的库?这背后有什么秘密是每个人都应该知道的吗?在发布版本中包含FromString 有什么问题? (我仍然认为这就是一切的原因)
问候,
丹尼尔
原帖:(你可以忽略这个)
我有最新版本的 IntelliJ (123.139)、Scala 2.10.0,到目前为止还没有遇到任何问题。
我没有使用 Java 时间库,而是渴望使用 Joda Time,并且看到在 Scala 中有很多隐式可以使用,我想尝试一下!我添加了所有库,但无法识别隐式。当我尝试通过 IDEA Popup Menu 编译时,出现以下错误:
error while loading DateTime, class file '~\workspace\Libraries\JodaTime\joda-time-2.1.jar(org/joda/time/DateTime.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 10 at byte 42)
error while loading DateTimeZone, class file '~\workspace\Libraries\JodaTime\joda-time-2.1.jar(org/joda/time/DateTimeZone.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 7 at byte 44)
error while loading AbstractInstant, class file '~\workspace\Libraries\JodaTime\joda-time-2.1.jar(org/joda/time/base/AbstractInstant.class)' is broken
(class java.lang.RuntimeException/bad constant pool tag 10 at byte 10)
我去了那些DateTime的源,发现org.joda.convert.FromString;被导入了,但是资源不存在!我猜是因为这个原因 Scala 不会编译。所以我用谷歌搜索我应该做什么。到处都是“SBT,SBT!!”,我试图找出这个 SBT 是什么,所以我安装了它:版本 0.12.2,手动安装(我使用的是 Windows 7)来自http://www.scala-sbt.org/。我希望它与我的 IntelliJ 一起运行,所以我去了~\.sbt\plugins,并使用addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0") 行创建了一个文件build.sbt,并从https://github.com/mpeltonen/sbt-idea 下载了zip,解压缩它,然后使用CMD 进入那个文件夹,在 sbt 中输入 sbt 和 gen-idea,它做了很多事情,而且似乎都解决了。所以我去了我想要运行 Joda Time 的项目,首先,将 Scala 2.10.0 包含到 SBT 似乎非常困难。我创建了一个文件<PROJECT>\build.sbt 并用这些行填充它:
name := "Project"
version := "1.0"
scalaHome := Some(file("C:/Program Files (x86)/scala"))
scalaVersion := "2.10.0"
然后,为了包含 scalaj 时间,我转到 <PROJECT>\project\project\ 并使用 libraryDependencies += "org.scalaj" %% "scalaj-time" % "0.6" 行创建了 build.sbt。
最后,我用CMD进入gen-idea,一切都很好。
我打开了 IntelliJ,我可以轻松打开项目。当我打开 Project Structure 时,我去了 Modules,有两个 Modules:Project 和 Project-build。我忽略了项目构建,单击项目模块,有很多不存在的源文件夹和测试文件夹:src/main/scala 等,我将它们全部删除并将我的src 添加为源文件夹。
我注意到外部库中不包含 Joda-Time(顺便说一句,我使用 Joda-Time 2.1 和 Scalaj-time 0.6),所以我不得不自己添加它们。 joda-time 库是一个 .jar 而 scalaj-time 是一个文件夹,但这应该没问题,对吧?我可以运行一个简单的println( DateTime.now ) 指令(我不知道以前是否可行;没有尝试过),但仍然无法运行+ 2.months。这是一个屏幕截图,您可以了解一下:
我想我已经非常详细地解释了我是如何进行的,我希望你能找到我做错的地方。我已经工作了好几个小时来解决这个问题,但最终,我还是回到了最初的位置……
感谢您的宝贵时间!
问候!
【问题讨论】:
-
顺便说一句,Joda-Time 并没有被破坏,Joda-Convert 依赖项只涉及一个注解,如果它缺失,Java 可以处理该注解。不幸的是,Scala 无法处理缺少的依赖项,从我的角度来看,这似乎是 Scala 中的一个错误。
标签: scala intellij-idea jodatime