Как заставить IntelliJ распознавать импорт в скрипте Scala?
У меня проблемы с тем, чтобы IntelliJ распознал импорт аммонита в моем скрипте Scala. Это новая функция, о которой сообщается здесь, где также есть инструкции. Я следовал инструкциям и запустил новый проект sbt в IntelliJ, чтобы попробовать его, но он не работает.
Я вижу аммонитовые зависимости в "внешних библиотеках" проекта, которые я указал в build.sbt
:
libraryDependencies += "com.lihaoyi" %% "ammonite-ops" % "1.0.3"
libraryDependencies += "com.lihaoyi" % "ammonite" % "1.0.3" cross CrossVersion.full
(Довольно простой) проект, кажется, успешно построен. Я также указал, что файлы листа Scala должны рассматриваться как "Всегда аммонит".
Все это, но в IDE скрипт выглядит так:
Что еще мне нужно сделать, чтобы заставить это работать?
Версии:
- Java 1.8.0
- Scala 2.12.4
- сб 1.0.3
- IntelliJ CE 2017.3.2
- IntelliJ Скала плагин 2017.3.11
3 ответа
У меня были похожие проблемы с IntelliJ, поэтому позвольте мне рассказать, как я это сделал.
Мои версии:
- IntelliJ Ultimate 2017.3.2 (поэтому в основном та же версия, что и у вас)
- Плагин IntelliJ Scala 2017.3.11
- Kubuntu, поэтому, возможно, придется скорректировать сочетания клавиш ниже
Теперь я начал с того же кода, что и вы, с обновленной версией зависимости0.6.7
,
Уже сейчас при нажатии зеленой стрелки рядом с 1-й строкой запускается Аммонит. Зависимости загружаются и отображается ссылка. Это обязательный шаг для IntelliJ, чтобы признать, что новая банка доступна.
Также на этом этапе Intellij показывает мне небольшое всплывающее окно с информацией, которую я могу импортировать в банку. Я не использовал это.
Чтобы IntelliJ распознал импорт, я нажимаю Alt+Enter Показать намеренные действия на сломанной com.lihaoyi::scalatags:0.6.7
зависимость и использовать Создать библиотеку из jar...
Это заставляет Intellij распознавать библиотеку, импортирует и может начать давать вам подсказки.
Библиотека добавлена в зависимости проекта (Ctrl+Alt+Shift+s). Вы также можете видеть зависимости, поступающие из других файлов ниже.
У меня были похожие проблемы с IntelliJ и, похоже, в IntelliJ есть ошибки.
Мои версии:
- IntelliJ Ultimate 2018.2.4
- Плагин IntelliJ Scala 2018.2.11
- ОС: Windows
- Scala: 2.12.6 (в настоящий момент текущий выпуск Аммонита 1.2.1 не выпущен для Scala 2.12.7, см. #879 и ниже)
Без проекта IntelliJ
Если я просто открою файл.sc без открытого проекта, то мне будет предложено
- Проект JDK не определен
- Нет Scala SDK в модуле
- уведомление: "Добавить все стандартные зависимости Ammonite в проект?"
Уведомление быстро исчезает. Если я нажму кнопку "Добавить" перед исправлением JDK, импорт не будет работать, и кнопка добавления исчезнет. исправьте jdk и scala, а затем найдите "Add all Ammonite..." в журнале событий и нажмите "add" там, тогда это работает.
Однако все изменения в настройках будут потеряны в следующий раз, когда я снова открою IntelliJ.
С проектом IntelliJ
- Создать новый проект Scala sbt project, проект по умолчанию на основе каталогов.
- Я где-то размещаю свои sc-файлы
Теперь IntelliJ запоминает настройки для sc-файлов. Я даже могу открыть sc-файлы непосредственно из explorer / total commander в IntelliJ после настройки 'open with...' на intellij, хотя я предпочитаю.
НЕ позволяйте IntelliJ автоматически импортировать настройки проекта sbt через уведомление, похоже, это разрушает импорт библиотеки, и мне нужно заново создать проект для восстановления.
Проблемы с версией Scala
Кнопка автоматического импорта библиотеки "add" будет работать только для тех версий Scala, для которых выпущен Ammonite. См. Релизы Maven Central Ammonite. На момент написания статьи Ammonite 1.2.1 не выпущен для scala-2.12.7, хотя текущая нестабильная версия аммонита есть. См. Сообщение об ошибке аммонита № 879. Кнопка добавления просто не работает тихо, что отстой, особенно для новичка, как я.
Автоматически сгенерированный файл сборки sbt выглядит следующим образом
name := "Ammonite"
version := "0.1"
scalaVersion := "2.12.6"
Вот как это выглядит в настройках проекта после успешной загрузки библиотек:
и вот зависимости, которые делают его компиляцией. Обратите внимание, что зависимости 'SBT: ' - это те, которые автоматически генерируются через SBT-файл (кажется), а остальные - библиотеки, добавленные функцией уведомлений аммонита плагина scala.
Приведенный выше список библиотек пуст, когда IntelliJ не может загрузить библиотеки аммонита.
IntelliJ с SBT (потому что IntelliJ теряет импорт аммонита, а за $ плющ)
IntelliJ часто теряет импорт аммонита. Если у меня есть настройка SBT для импорта, это не имеет большого значения. Также поддержка IntelliJ $ivy для аммонита работает только тогда, когда файлы уже кэшированы локально в ivy-cache, а запуск сценария 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"
Я думаю, что IntelliJ IDEA не найдет зависимости в локальном кеше, если вы работаете в основном с Scala 2.13 и SBT 1.3+ с управлением библиотекой Coursier. Нам нужно помочь IntelliJ IDEA, загрузив зависимости в кеш Ivy.
Я решил эту проблему:
Создание
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
.- Затем нам нужно "Создать библиотеку из jar..." из красных действий контекста импорта в IntelliJ IDEA.
Вот и все!
Вам нужно связать.sc файлы с аммонитом.
в твоих настройках должно выглядеть вот так (решение взято отсюда)
Я также рекомендовал бы прочитать следующий пост в блоге (прокрутите вниз до раздела Поддержка скриптов Ammonite), чтобы убедиться, что у вас есть все необходимые требования.