Как заставить Intellij использовать зависимости от SBT scala - PullRequest
4 голосов
/ 29 января 2012

Я пытаюсь выяснить, как идея распознает сторонние зависимости при использовании SBT.Когда я использую плагин sbt gen-idea, кажется, что он загружает все необходимые зависимости, которые, как и ожидалось, помещаются в мой каталог ~ / .ivy /.Как может intellij использовать эти deps?

РЕДАКТИРОВАТЬ: Одна вещь, которую я заметил, если я создаю новый проект идеи, а не просто модуль, то это работает?Есть идеи, почему это будет?Я хотел бы иметь возможность иметь несколько модулей sbt в одном проекте.

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Плагин sbt-idea работает с многомодульным проектом sbt.Мы использовали его где-то около sbt-0.10.0, и в настоящее время находимся на sbt-0.11.2.Кажется, что у вас есть настроенная часть зависимостей файла сборки, так что вот пример того, как мы выполняем настройку проекта из файла Build.scala с полной спецификацией:

object Vcaf extends Build {
  import Resolvers._
  import Dependencies._
  import BuildSettings._

  lazy val vcafDb = Project(
    id = "vcaf-db",
    base = file("./vcaf-db"),
    dependencies = Seq(),
    settings = buildSettings ++ /* proguard */ SbtOneJar.oneJarSettings ++  Seq(libraryDependencies := dbDeps, resolvers := cseResolvers)
  )

  lazy val vcaf = Project(
    "vcaf",
    file("."),
    dependencies = Seq(vcafDb),
    aggregate = Seq(vcafDb),
    settings = buildSettings ++ Seq(libraryDependencies := vcafDeps, resolvers := cseResolvers) ++ webSettings
  )
}

В этом примереПроект vcaf-db находится в папке внутри папки проекта vcaf.Проект vcaf-db не имеет своего собственного файла build.sbt или Build.scala.Вы заметите, что мы указываем libraryDependencies для каждого проекта, который может быть или не быть вашей отсутствующей ссылкой.

Как упомянул ChrisJamesC, вам нужно выполнить «перезагрузку» из SBT (или выйти из sbt и вернуться обратно), чтобы получить изменения в вашем определении сборки.После перезагрузки проекта вы сможете выполнить «gen-idea no-classifiers no-sbt-classifiers» и получить проект intellij, который имеет основной проект, модули и доступ к библиотеке, как определено в файле сборки.

Надеюсь, это поможет!

0 голосов
/ 30 января 2012

Если вам нужно несколько модулей SBT в одном проекте IDEA, вы можете использовать sbt многопроектные сборки (также называемые подпроектами). Просто создайте мастер-проект, который ссылается на модули как подпроекты, затем запустите gen-idea на мастере. Чтобы указать зависимости между модулями, вы должны использовать Build.scala (не build.sbt), как в ответе jxstanford или как это:

lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)

Один уровень подпроектов работает нормально (с зависимостями, правильно отраженными в результирующем проекте IDEA), но вложенные подпроекты, похоже, не работают. Кроме того, кажется, что есть ограничение sbt, что подпроекты должны находиться в подкаталогах главного проекта (то есть, file("../foo") не допускается).

См. Также Как управлять несколькими взаимозависимыми модулями с SBT и IntelliJ IDEA? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...