不能将 sbt 0.13.7 与 Play 子项目一起使用
Can't use sbt 0.13.7 with Play subprojects
我有一个 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,但找不到与此相关的任何内容...
确实,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
.
中定义子项目
这个问题也在 2016 年 5 月在这里讨论过:SBT: How to define dependencies of subprojects in subprojects' build.sbt files? 评论中的答案基本上也是 SBT 不希望您在多项目构建的子项目中有 build.sbt 文件。
我有一个 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,但找不到与此相关的任何内容...
确实,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
.
这个问题也在 2016 年 5 月在这里讨论过:SBT: How to define dependencies of subprojects in subprojects' build.sbt files? 评论中的答案基本上也是 SBT 不希望您在多项目构建的子项目中有 build.sbt 文件。