首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IntelliJ + SBT插件+多项目设置=未解析的依赖关系?

IntelliJ + SBT插件+多项目设置=未解析的依赖关系?
EN

Stack Overflow用户
提问于 2011-11-17 18:03:34
回答 2查看 2.9K关注 0票数 3

我创建了一个具有以下结构的新项目(混淆名称:):

代码语言:javascript
复制
Parent
|-- Child A
|-- Child B

Parent/build.sbt中的灯光构建定义如下:

代码语言:javascript
复制
name := "Parent"

scalaVersion := "2.9.1"

version := "1.0.0-SNAPSHOT"

Parent/project/Build.scala中的完整定义如下:

代码语言:javascript
复制
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中,我有:

代码语言:javascript
复制
resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

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

如果我在文件夹Parent中运行sbt gen-idea,所有依赖项都会正确下载,并且会为Parent正确创建项目定义。但是,sbt还会尝试在子项目projectAprojectB中运行该命令。此操作将失败,并显示以下错误:

代码语言:javascript
复制
[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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-18 02:06:42

我不会为子项目禁用gen-idea,因为插件会为每个子项目创建单独的模块。

I guessTechnically你可以通过在每个子项目的build.sbt中添加解析器来解决这个问题

代码语言:javascript
复制
resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

然而,我不确定为什么你需要它,因为它应该在没有它的情况下工作。当插件版本与sbt版本不同时,我也遇到了类似的问题(您可以使用about命令检查sbt版本)

票数 0
EN

Stack Overflow用户

发布于 2011-11-17 18:23:07

aggregate命令的文档显示,它还用于执行子项目的所有命令。因此,在Parent上执行compile也会在Project AProject B上执行compile

来自sbt文档

聚合意味着在聚合项目上运行任务也会在聚合项目上运行它。使用示例中的两个子项目启动sbt,并尝试编译。您应该看到所有三个项目都已编译。

进一步阅读它表明您可以从聚合中排除某些任务,因此您希望这样做

代码语言:javascript
复制
aggregate in gen-idea := false

这回答了您的问题,但我认为它不会使您的设置工作。我目前也在为多项目sbt而苦苦挣扎。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8165272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档