【问题标题】:Using Joda Time in Scala (scalaj-time) with IntelliJ IDEA在 IntelliJ IDEA 中使用 Scala 中的 Joda Time (scalaj-time)
【发布时间】: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 中输入 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 时间,我转到 <PROJECT>\project\project\ 并使用 libraryDependencies += "org.scalaj" %% "scalaj-time" % "0.6" 行创建了 build.sbt

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

我打开了 IntelliJ,我可以轻松打开项目。当我打开 Project Structure 时,我去了 Modules,有两个 Modules: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。这是一个屏幕截图,您可以了解一下:

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

感谢您的宝贵时间!

问候!

【问题讨论】:

  • 顺便说一句,Joda-Time 并没有被破坏,Joda-Convert 依赖项只涉及一个注解,如果它缺失,Java 可以处理该注解。不幸的是,Scala 无法处理缺少的依赖项,从我的角度来看,这似乎是 Scala 中的一个错误。

标签: scala intellij-idea jodatime


【解决方案1】:

How to import FromString for joda-time?

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

【讨论】:

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

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

    所以,现在可以了。

    问候。

    【讨论】:

    • 一些 cmets:行为未定义。当我尝试编译时,我不断收到错误消息,如果我更改设置中的某些内容,它有时会开始工作。现在我切换了项目,做了同样的事情,它在那里不起作用。我去了我的另一个项目(提供了源代码),它也没有在那里工作!比如,什么鬼?它刚刚编译并运行没有问题,现在它不起作用。我去了设置,调整了一些东西(首先是 Javac,然后是 Scalac,External)等等,经过十几次尝试,它又开始工作了。任何人有任何关于为什么的进一步信息?
    • 我完全感到困惑。我又去了我的另一个项目,它没有工作,所以我尝试配置一些设置。不知何故,这行不通。我尝试“编译”它并尝试“运行”它,但它不起作用。所以我字面上连续三次点击“运行”,中间没有做任何事情。我只是单击它,第一次出现大量错误,第二次出现“未捕获的异常”,第三次出现。这怎么可能?...我不知道该相信什么了...
    猜你喜欢
    • 2020-11-13
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 2015-05-22
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多