【问题标题】:Can't use sbt 0.13.7 with Play subprojects不能在 Play 子项目中使用 sbt 0.13.7
【发布时间】:2015-04-22 19:08:23
【问题描述】:

我有一个sample Play 2.3.8 project,它由两个子项目(common 和 common2)组成:

$ tree -L 2 .
.
├── build.sbt
├── common
│   ├── app
│   ├── build.sbt
│   ├── conf
├── common2
│   ├── app
│   ├── build.sbt
│   ├── conf
├── conf
│   (...)
├── build.sbt

在主要的build.sbt 中,对这两个子项目的依赖定义为:

lazy val common = (project in file("common")).enablePlugins(PlayJava)

lazy val common2 = (project in file("common2")).enablePlugins(PlayJava)

lazy val main = (project in file(".")).enablePlugins(PlayJava)
                    .aggregate(common, common2).dependsOn(common, common2)

这按预期工作。现在我试图让这个项目使用 sbt 0.13.7(目前它使用 0.13.5),当我启动激活器时,我总是会收到这样的错误(Test 是我项目的根):

[info] Done updating.
java.lang.RuntimeException: No project 'common' in 'file:/home/user/Desktop/Test/'.
Valid project IDs: main
    at scala.sys.package$.error(package.scala:27)
    // OMITTED
    at xsbt.boot.Boot.main(Boot.scala)
[error] No project 'common' in 'file:/home/user/Desktop/Test/'.
[error] Valid project IDs: main
[error] Use 'last' for the full log.

那么可能是什么问题?定义子项目的方式是否改变了?我查看了从 0.13.5 到 0.13.7 的 changes 并找不到与此相关的任何内容...

【问题讨论】:

  • 只是检查,但你已经运行clean 对吗?
  • 是的,我做到了(将 sbt 设置为 0.13.5 -> clean -> 将 sbt 设置为 0.13.7)。问题出在 sbt 方面(我什至无法加载项目,所以我无法运行 updatecompile 等)。此外,这只发生在子项目设置中

标签: playframework sbt


【解决方案1】:

确实,在 sbt 0.13.5 和 0.13.6 之间似乎发生了一些变化。在我的示例项目中,我在主 build.sbt 中定义了所有子项目,但也在子项目文件夹中重新定义了它们。

所以以common/build.sbt为例,子项目又被定义为

lazy val main = (project in file(".")).enablePlugins(PlayJava)

这在 0.13.5 中运行良好,但在那之后就中断了。

所以解决方案是删除这些行,只在主build.sbt 中定义子项目。

【讨论】:

  • 我遇到了同样的问题,它对我有用。谢谢。
【解决方案2】:

这个问题也在 2016 年 5 月在这里讨论过:SBT: How to define dependencies of subprojects in subprojects' build.sbt files? cmets 中的答案也基本上是 SBT 不希望您在多项目构建的子项目中有 build.sbt 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    相关资源
    最近更新 更多