4

编辑:

版本信息,截至 2013 年 1 月 27 日:

Scala 2.10.0
IntelliJ IDEA Leda 123.139 (EAP)
Scala 插件版本 0.7.108 (Nightly Build)
JDK 7u11
Joda Time 2.1
ScalaJ-Time 2.9.1-0.6

我已经放弃尝试使用SBT,因为我没有看到任何进展 - 我不知道如何结合IntelliJSBT,经过数小时的尝试,我最终到达了我最初开始的地方.

我的 JodaTime 库包含 Scalaj-Time jar:

我已经尝试了几乎所有设置组合,从联合编译(首先是 Scala,然后是 Java 和 vv)外部构建,到将我的 JodaTime 库提升到依赖项中的 Scala 库(是的,我什至已经这样做了),以及使缓存失效。我得到的只是一堆错误——无论我是“制作”项目、“运行”当前文件还是“编译”它——都是随机产生的。而且,有时,它会起作用。是的,尽管听起来很愚蠢,但这种行为是未定义的。我不确定是什么原因造成的。我统计了出现的 3 条不同的错误信息,我会将它们上传到 paste.org,否则会占用太多空间:http://pastie.

我没有尝试过的:回到前面的任何应用程序/库的早期版本深入了解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 是什么,所以我安装了它:来自http://www的版本 0.12.2,手动安装(我使用的是 Windows 7) .scala-sbt.org/。我希望它与我的 IntelliJ 一起运行,所以我去了,并使用该行~\.sbt\plugins创建了一个文件并从https://github.com/mpeltonen/sbt-idea下载了 zip ,解压缩它,然后使用 CMD 进入那个文件夹, 输入和build.sbtaddSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0")sbtgen-idea在 sbt 中,它做了很多事情,而且似乎都解决了。所以我去了我想要运行 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"

<PROJECT>\project\project\然后,为了包含 scalaj-time,我build.sbt使用libraryDependencies += "org.scalaj" %% "scalaj-time" % "0.6".

最后,我用CMD进入<PROJECT>,输入“sbt”,它(下载)了很多文件,似乎成功了,然后我进入gen-idea,一切都很好。

我打开了 IntelliJ,我可以轻松打开项目。当我打开项目结构时,我去了模块,有两个模块:ProjectProject-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仍然不可能。这是一个屏幕截图,所以你明白了:

我想我已经非常详细地解释了我是如何进行的,我希望你能找到我做错的事情。我已经工作了好几个小时来解决这个问题,但最终,我还是回到了最初的位置……

感谢您的时间!

问候!

4

2 回答 2

4

如何为 joda-time 导入 FromString?

这就像一个魅力(现在,谁知道事情会如何发生)。我很生气,以至于我一开始就没有想到这个...... Grrrrrr。

于 2013-01-27T21:39:09.770 回答
2

编辑:

这个答案是无效的。请参阅主帖中的编辑。虽然这有时会起作用,但对于何时起作用仍然没有明确的定义。当我创建一个新项目时,它从工作到不工作(不编译,打印随机错误)不等,但在另一个更大的项目中,它具有相同的未定义行为,除了现在(无论出于何种原因)它不起作用,时期。(在我新创建的项目中,它仍然有所不同)

原帖

因此,经过 10 分钟的尝试和谷歌搜索,我找到了 Scalaj-time (0.6) 的 .JAR。

我就像“嗯,它会带来什么危害?”,下载了它,并包含它而不是文件夹。

Tadaaa,一切正常......我也只需要这些行:

object Test extends App {
    import org.scala_tools.time.Imports._
    println( DateTime.now + 2.months )
}

没有 SBT,什么都没有,没有任何其他进口。您只需从http://mvnrepository.com/artifact/org.scalaj/scalaj-time_2.9.1(版本 0.6,截至目前)和 Joda Time (V 2.1) 下载 scalaj_time,制作一个包含 2 个以上 jar 的库 ScalajTime,并将其添加到您的依赖项中。您所需要的只是一个导入语句,您就可以开始了。

也许主要问题是我无法从库中导入源文件?因为我导入的源文件夹似乎没有任何影响。我不知道我是如何“忽略”这个事实的,但假设它似乎很愚蠢。

所以,现在它可以工作了。

问候。

于 2013-01-26T13:11:20.833 回答