IntelliJ + плагин SBT + настройка мультипроекта = неразрешенная зависимость? - PullRequest
3 голосов
/ 17 ноября 2011

Я создал новый проект со следующей структурой (запутанные имена:):

Parent
|-- Child A
|-- Child B

Определение легкой сборки в Parent/build.sbt выглядит следующим образом:

name := "Parent"

scalaVersion := "2.9.1"

version := "1.0.0-SNAPSHOT"

Полное определение в Parent/project/Build.scala выглядит следующим образом:

import sbt._
import Keys._

object MyBuild extends Build {
    lazy val root = Project(id = "Parent",
                            base = file(".")) aggregate(projectA, projectB)

    lazy val projectA = Project(id = "Project A",
                           base = file("projectA"))

    lazy val projectB = Project(id = "Project B",
                           base = file("projectB"))
}

В ~/.sbt/plugins/build.sbt у меня есть это:

resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "0.11.0")

Если я запускаю sbt gen-idea в папке Parent, все зависимости загружаются правильно, и определения проекта создаются правильно для Parent. Однако sbt также пытается выполнить команду в подпроектах projectA и projectB. Это терпит неудачу со следующим:

[warn]  module not found: com.github.mpeltonen#sbt-idea;0.11.0
[warn] ==== local: tried
[warn]   /home/me/.ivy2/local/com.github.mpeltonen/sbt-idea/scala_2.9.1/sbt_0.11.1/0.11.0/ivys/ivy.xml
[warn] ==== Maven2 Local: tried
[warn]   file:/home/me/.m2/repository/com/github/mpeltonen/sbt-idea_2.9.1_0.11.1/0.11.0/sbt-idea-0.11.0.pom
[warn] ==== typesafe-ivy-releases: tried
[warn]   http://repo.typesafe.com/typesafe/ivy-releases/com.github.mpeltonen/sbt-idea/0.11.0/ivys/ivy.xml
[warn] ==== public: tried
[warn]   http://repo1.maven.org/maven2/com/github/mpeltonen/sbt-idea_2.9.1_0.11.1/0.11.0/sbt-idea-0.11.0.pom
[warn] ==== Scala-Tools Maven2 Repository: tried
[warn]   http://scala-tools.org/repo-releases/com/github/mpeltonen/sbt-idea_2.9.1_0.11.1/0.11.0/sbt-idea-0.11.0.pom
[warn] ==== Scala-Tools Maven2 Snapshots Repository: tried
[warn]   http://scala-tools.org/repo-snapshots/com/github/mpeltonen/sbt-idea_2.9.1_0.11.1/0.11.0/sbt-idea-0.11.0.pom
[info] Resolving commons-io#commons-io;2.0.1 ...
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: com.github.mpeltonen#sbt-idea;0.11.0: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn] 
[warn]  Note: Some unresolved dependencies have extra attributes.  Check that these dependencies exist with the requested attributes.
[warn]      com.github.mpeltonen:sbt-idea:0.11.0 (sbtVersion=0.11.1, scalaVersion=2.9.1)
[warn] 
[error] {file:/opt/workspace/Parent/}ProjectA/*:update-sbt-classifiers: sbt.ResolveException: unresolved dependency: com.github.mpeltonen#sbt-idea;0.11.0: not found
[info] Created /opt/workspace/Parent/.idea_modules/project.iml

Я получаю тот же результат, если переместить ~/.sbt/plugins/build.sbt на Parent/project/build.sbt.

Как я могу помешать детям Parent выполнить gen-idea?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

В документации команды aggregate говорится, что она предназначена для выполнения всех команд также для подпроектов.Таким образом, выполнение compile в Parent также будет выполнять compile в Project A и Project B.

Из документов sbt

Агрегирование означает, что выполнение задачи вагрегатный проект также будет запускать его на агрегированных проектах.Запустите sbt с двумя подпроектами, как в примере, и попробуйте скомпилировать.Вы должны увидеть, что все три проекта скомпилированы.

Читая далее, он говорит, что вы можете исключить определенные задачи из агрегации, поэтому вы хотите выполнить

aggregate in gen-idea := false

Это ответ на ваш вопрос, но я не думаю, что это заставит ваши настройки работать.В настоящее время я тоже борюсь с мультипроектным sbt.

0 голосов
/ 17 ноября 2011

Я бы не стал отключать gen-idea для подпроектов, так как плагин создает отдельный модуль для каждого подпроекта.

Полагаю, технически вы можете решить эту проблему, добавив преобразователь в сборку каждого подпроекта. Sbt

resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

Я не уверен, однако, зачем вам это нужно, поскольку это должно работать без этого. У меня была похожая проблема, когда версия плагина отличалась от версии sbt (вы можете проверить версию sbt с помощью команды about)

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