使用IntelliJ IDEA在Scala(scalaj-time)中使用Joda Time

时间:2013-01-26 11:34:03

标签: scala intellij-idea jodatime

修改

版本信息,截至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)外部版本,到提升我的JodaTime库在依赖项中的Scala库(是的,我甚至已经完成了),以及使缓存无效。我得到的只是一堆错误 - 无论我是“制作”项目,“运行”当前文件还是“编译”它 - 随机生成。而且,有时,它的工作原理。是的,听起来很愚蠢,行为 未定义。我不确定是什么原因引起的。我已经计算了3条不同的错误消息,我会将它们上传到pastie.org,否则会占用太多空间: http://pastie.org/pastes/5887847/text

我还没有尝试过:回到上面的任何应用程序/库的早期版本深入 SBT (我觉得这不值得。)

我对这个帖子有什么期望?我希望有人能为这个问题提供一个可靠的解决方案,在最好的情况下,不会提及 SBT (可选)。

此外,在旁注:为什么Joda-Time以破碎的格式发送他们的库?这背后有什么秘密,每个人都应该知道吗?将FromString包含在发布版本中有什么问题? (我仍然认为这就是原因)

的问候,
Danyel

原始帖子:(你可以忽略这一点)

我有最新版本的IntelliJ(123.139),Scala 2.10.0,到目前为止没有遇到任何问题。

我没有使用Java时间库,而是急于使用Joda Time,并且看到在Scala中使用了很多隐含的内容,我想尝试一下!我添加了所有库,但不会识别出implicits。当我尝试通过IDEA弹出菜单编译它时,出现以下错误:

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不能编译的原因。所以我用Google搜索我应该做的事情。它到处说“SBT,SBT !!”,我试图找出这个SBT是什么,所以我安装了它:版本0.12.2,手动安装(我使用的是Windows 7)来自http://www.scala-sbt.org/ 。我想让它与我的IntelliJ一起运行,所以我转到~\.sbt\plugins,并使用行build.sbt创建了一个文件addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.2.0"),并从https://github.com/mpeltonen/sbt-idea下载了zip文件,将其解压缩,然后用CMD去了那个文件夹,在sbt中输入了sbtgen-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-time,我转到了<PROJECT>\project\project\并使用第build.sbt行创建了libraryDependencies += "org.scalaj" %% "scalaj-time" % "0.6"

最后,我去了&lt; PROJECT&gt;使用CMD,输入“sbt”,它(下)加载了很多文件,它似乎工作了,然后我输入gen-idea,一切都很好。

我打开IntelliJ,我可以轻松打开项目。当我打开Project Structure时,我去了Modules,有两个模块:ProjectProject-build。我忽略了Project-build one,点击了Project模块,并且有很多源文件夹和测试文件夹不存在:src/main/scala等等,我删除了它们并添加了src作为源文件夹。

我注意到Joda-Time没有包含在外部库中(顺便说一句,我使用的是Joda-Time 2.1和Scalaj-time 0.6),所以我不得不自己添加它们。 joda-time库是一个.jar而scalaj-time是一个文件夹,但这应该没问题,对吧?我可以运行一个简单的println( DateTime.now )指令(我不知道之前是否可能;没试过),但+ 2.months仍然不可能。这是一个截图,所以你明白了:

我想我已经详细解释了我是如何进行的,我希望你能找到我做错的事情。我已经工作了好几个小时来解决这个问题,但最后,我降落在我刚开始的地方......

感谢您的时间!

问候!

2 个答案:

答案 0 :(得分:4)

<强> How to import FromString for joda-time?

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

答案 1 :(得分:2)

修改

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

原始帖子

所以,经过另外10分钟的尝试和谷歌搜索,我找到了Scalaj时间的.JAR(0.6)。

我就像“好吧,它带来了什么伤害?”,下载它,并将其包含在内而不是文件夹中。

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库,并将其添加到您的依赖项中。您只需要一个导入语句就可以了。

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

所以,现在它有效。

问候。