我无法让IntelliJ在我的Scala脚本中识别Ammonite导入。这是一项新功能,报告here,其中还有说明。我按照说明操作,然后在IntelliJ中启动了一个新的sbt项目来试用它,但是它没有工作。
我在build.sbt
中指定的项目"外部库"中看到了Ammonite依赖项:
libraryDependencies += "com.lihaoyi" %% "ammonite-ops" % "1.0.3"
libraryDependencies += "com.lihaoyi" % "ammonite" % "1.0.3" cross CrossVersion.full
(非常简单)项目似乎成功构建。我还指出Scala工作表文件应该被视为"始终是Ammonite"。
我还需要做些什么才能让它发挥作用?
版本:
答案 0 :(得分:7)
我有类似IntelliJ的问题,所以让我分享一下我是如何工作的。
我的版本:
现在,我从与您相同的代码开始,使用更新版本的依赖项0.6.7
。
现在已经按下绿线箭头到第一行旁边的是Ammonite。下载依赖项并显示链接。 这是强制性步骤,以便IntelliJ识别出新的jar可用。
同样在这个阶段,Intellij向我展示了一个小弹出窗口,其中包含我可以导入jar的信息。 我没有使用它。
要让IntelliJ识别导入,我按 Alt + 输入 显示意图操作对已损坏的com.lihaoyi::scalatags:0.6.7
依赖项进行操作从jar创建库...
这使得Intellij识别出库,导入并且它可以开始给你提示。
该库已添加到项目的依赖项中( Ctrl + Alt + Shift + s )。您还可以在下面看到来自其他文件的依赖项。
答案 1 :(得分:1)
我在IntelliJ中也遇到了类似的问题,并且似乎在解决IntelliJ中的错误。
我的版本:
没有IntelliJ项目
如果我只是打开.sc文件而不打开项目,那么我会提示
该通知很快消失。如果在修复JDK之前单击“添加”按钮,则导入将不起作用,并且添加按钮也消失了。修复jdk和scala,然后在事件日志中找到“添加所有Ammonite ...”,然后在其中单击“添加”,即可使用。
但是,下次我重新打开IntelliJ时,所有设置更改都会丢失。
使用IntelliJ Project
现在,IntelliJ可以记住sc文件的设置。我什至可以将IntelliJ的'open with ...'配置为打开后,甚至可以直接从IntelliJ中的资源管理器/总指挥官打开sc文件。
不允许IntelliJ通过通知自动导入sbt项目设置,这似乎破坏了库的导入,我需要重新创建项目才能恢复。
Scala版本问题
库自动导入“添加”按钮仅适用于已发布Ammonite的Scala版本。参见Maven Central Ammonite releases。在撰写本文时,尚未发布针对scala-2.12.7的Ammonite 1.2.1,尽管当前存在不稳定版本的Ammonite。参见Ammonite bug-report #879。添加按钮只是默默地失败,这很糟糕。对于像我这样的新手。
自动生成的sbt构建文件如下所示
name := "Ammonite"
version := "0.1"
scalaVersion := "2.12.6"
库成功加载后,这是项目设置中的外观:
,这里是使其编译的依赖项。请注意,“ SBT:”依赖项是通过SBT文件自动生成的(似乎),其他是由scala插件的ammonite通知功能
添加的库。当IntelliJ无法加载炸药库时,以上库列表为空。
带有SBT的IntelliJ(因为IntelliJ丢失了am石进口,价格为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"
答案 2 :(得分:1)
我认为,如果您主要通过Coursier库管理来使用Scala 2.13和SBT 1.3+,则IntelliJ IDEA不会在本地缓存中找到依赖项。我们需要通过将依赖项下载到Ivy缓存中来帮助IntelliJ IDEA。
我通过以下方式解决了这个问题:
在具有所需依赖项的地方创建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。
使用创建的ivy -refresh
从目录运行ivy.xml
。
仅此而已!
答案 3 :(得分:0)