10

我无法让 IntelliJ 在我的 Scala 脚本中识别 Ammonite 导入。这是一项新功能,在此处报告,其中也有说明。我按照说明在 IntelliJ 中启动了一个新的 sbt 项目进行尝试,但它不起作用。

我在项目的“外部库”中看到了 Ammonite 依赖项,我在以下文件中指定了这些依赖项build.sbt libraryDependencies += "com.lihaoyi" %% "ammonite-ops" % "1.0.3" libraryDependencies += "com.lihaoyi" % "ammonite" % "1.0.3" cross CrossVersion.full

(非常简单的)项目似乎成功构建。我还指定应将 Scala 工作表文件视为“Always Ammonite”。

所有这一切,但 IDE 显示的脚本如下: 在此处输入图像描述

我还需要做什么才能使其正常工作?

版本:

  • Java 1.8.0
  • 斯卡拉 2.12.4
  • sbt 1.0.3
  • IntelliJ CE 2017.3.2
  • IntelliJ scala 插件 2017.3.11
4

4 回答 4

11

我在使用 IntelliJ 时遇到了类似的问题,所以让我分享一下我是如何让它工作的。

我的版本:

  • IntelliJ Ultimate 2017.3.2(所以基本上和你的版本一样)
  • IntelliJ Scala 插件 2017.3.11
  • Kubuntu,所以下面的键盘快捷键可能需要调整

现在,我从与您相同的代码开始,更新了依赖版本0.6.7盯着代码

现在已经按下第一行旁边的绿色箭头运行 Ammonite。下载依赖项并显示链接。这是IntelliJ 识别新 jar 可用的强制性步骤。

同样在这个阶段,Intellij 向我显示了一个小弹出窗口,其中包含我可以导入 jar 的信息。我没有使用它导入 $ivy 依赖项

为了让 IntelliJ 识别导入,我在损坏的依赖项上按Alt+ Enter Show Intention Actions并使用Create library from jar ...com.lihaoyi::scalatags:0.6.7 从jar创建库...

这使 Intellij 识别库、导入并且可以开始给你提示。 在此处输入图像描述

该库被添加到项目的依赖项 ( Ctrl+ Alt+ Shift+ s) 中。您还可以看到来自下面其他文件的依赖项。 增加依赖的项目结构

于 2017-12-28T22:38:52.517 回答
2

我与 IntelliJ 有类似的问题,并且似乎正在解决 IntelliJ 中的错误。

我的版本:

  • IntelliJ Ultimate 2018.2.4
  • IntelliJ Scala 插件 2018.2.11
  • 操作系统:Windows
  • Scala:2.12.6(目前 Ammonite 当前版本 1.2.1 尚未针对 Scala 2.12.7 发布,请参见#879及以下版本)

没有 IntelliJ 项目

如果我只是打开 .sc 文件而不打开项目,那么我会收到提示

  • 项目 JDK 未定义
  • 模块中没有 Scala SDK
  • 通知:“将所有 Ammonite 标准依赖项添加到项目中?”

通知很快就消失了。如果我在修复 JDK 之前单击“添加”按钮,则导入不起作用,并且添加按钮消失了。修复 jdk 和 scala,然后在事件日志中找到“添加所有 Ammonite ...”并单击“添加”,然后它就可以工作了。

但是,下次我重新打开 IntelliJ 时,所有设置更改都会丢失。

使用 IntelliJ 项目

  • 创建新项目 Scala sbt 项目,基于默认目录的项目。
  • 我把我的 sc 文件放在那里的某个地方

现在 IntelliJ 会记住 sc 文件的设置。我什至可以直接从 IntelliJ 中的资源管理器/总指挥官打开 sc 文件,但我更喜欢在将“打开方式...”配置为 intellij 之后。

不要让 IntelliJ 通过通知自动导入 sbt 项目设置,这似乎破坏了库导入,我需要重新创建项目才能恢复。

Scala 版本问题

库自动导入“添加”按钮仅适用于发布 Ammonite 的 Scala 版本。请参阅Maven Central Ammonite 版本。在撰写本文时,尚未针对 scala-2.12.7 发布 Ammonite 1.2.1,尽管当前不稳定的 ammonite 版本已发布。请参阅Ammonite 错误报告 #879。添加按钮只是默默地失败,这很糟糕,尤其是。对于像我这样的新手。

自动生成的 sbt 构建文件如下所示

name := "Ammonite"
version := "0.1"
scalaVersion := "2.12.6"

这是成功加载库后在项目设置中的外观:

在此处输入图像描述

这是使它编译的依赖项。请注意,“SBT:”依赖项是通过 SBT 文件自动生成的(似乎),其他是由 scala 插件 ammonite 通知功能添加的库

在此处输入图像描述

当 IntelliJ 无法加载 ammonite 库时,上述库列表为空。

带有 SBT 的 IntelliJ(因为 IntelliJ 丢失了菊石进口,并且对于 $ivy)

IntelliJ 似乎经常丢失其菊石进口。如果我有 SBT 设置来提供导入,那么这并不重要。此外,IntelliJ $ivy 对 ammonite 的支持仅在文件已经本地缓存在 ivy-cache 中时才有效,并且在我的 Windows 上运行 Ammonite 脚本会将文件缓存在不同的位置,这意味着 IntelliJ $ivy 导入有效地不起作用。因此,我使用 SBT 来设置我在脚本中使用的导入的总和。

我的 build.sbt

scalaVersion := "2.12.7"
// https://mvnrepository.com/artifact/com.lihaoyi/ammonite
libraryDependencies += "com.lihaoyi" % ("ammonite_" + scalaVersion) % "1.2.1-16-48ce533"

// Extra example dependency
libraryDependencies += "org.jsoup" % "jsoup" % "1.11.3"
于 2018-10-04T18:45:37.553 回答
2

如果您主要使用带有 Coursier 库管理的 Scala 2.13 和 SBT 1.3+,我认为 IntelliJ IDEA 不会在本地缓存中找到依赖项。我们需要通过将依赖项下载到 Ivy 缓存来帮助 IntelliJ IDEA。

我通过以下方式解决了这个问题:

  1. 创建ivy.xml具有所需依赖项的位置,例如:

    <ivy-module version="1.0">
        <info organisation="test" module="download-deps"/>
        <dependencies>
            <dependency org="com.softwaremill.sttp.client" name="core_2.12" rev="2.1.1"/>
            <dependency org="com.softwaremill.sttp.client" name="okhttp-backend_2.12" rev="2.1.1"/>
            <dependency org="com.github.tototoshi" name="scala-csv_2.12" rev="1.3.6"/>
        </dependencies>
    </ivy-module>
    

    注意,我在这里指定了 Scala 2.12。

  2. ivy -refresh从创建的目录运行ivy.xml.

  3. 然后我们需要从 IntelliJ IDEA 中红色导入的上下文操作中“从 jar 创建库...”。

就这样!

于 2020-05-12T05:32:39.763 回答
0

您需要将 .sc 文件与 ammonite 相关联。

在您的设置中,它应该看起来像这样 在此处输入图像描述 (解决方案取自此处

我还建议阅读以下博客文章(向下滚动到Ammonite 脚本支持),以确保您有所有需要的要求

于 2017-12-28T15:35:02.180 回答