在 Play 2.6.3 项目的根文件夹中找不到非 Play Sbt Scala 子项目



我使用 Gitter Play Scala Seed 模板创建了一个入门项目。 后来,我决定按照这些和这些说明将另一个项目作为子项目添加到这个项目中。但是,即使我添加了子项目文件夹并从我的build.sbt文件中引用它,每当我运行update(或其任何依赖项(时,我都会收到一条错误消息,指出找不到子项目。

这是我在播放项目(我的基础项目(文件夹中使用build.sbt

name := """play-scala-starter-example"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file("."))
.enablePlugins(PlayScala)
.aggregate(lettergenerator)
.dependsOn(lettergenerator)
// I have also tried it explicitly:
// lazy val lettergenerator = (project in file("lettergenerator"))
lazy val lettergenerator = project
resolvers += Resolver.sonatypeRepo("snapshots")
scalaVersion := "2.12.2"
libraryDependencies += guice
libraryDependencies += "org.scalatestplus.play" %% "scalatestplus-play" % "3.0.0" % Test
libraryDependencies += "com.h2database" % "h2" % "1.4.194"

这是我的文件夹结构:

play-scala-starter-example
├ app
├ build.sbt
├ conf
├ lettergenerator
│  ├ build.sbt
│  ├ LICENSE
│  ├ project
│  ├ README.md
│  ├ src
│  └ TODO.md
├ LICENSE
├ logs
├ project
├ public
├ README.md
├ target
└ test

下面是错误的堆栈跟踪:

[info] Loading global plugins from /home/claudiusbr/.sbt/0.13/plugins
[info] Loading project definition from /home/claudiusbr/test/play-scala-starter-example/project
java.lang.RuntimeException: No project 'lettergenerator' in 'file:/home/claudiusbr/test/play-scala-starter-example/'.
Valid project IDs: root
at scala.sys.package$.error(package.scala:27)
at sbt.Load$$anonfun$checkAll$2$$anonfun$apply$16.apply(Load.scala:401)
at sbt.Load$$anonfun$checkAll$2$$anonfun$apply$16.apply(Load.scala:396)
at scala.collection.immutable.List.foreach(List.scala:318)
at sbt.Load$$anonfun$checkAll$2.apply(Load.scala:396)
at sbt.Load$$anonfun$checkAll$2.apply(Load.scala:396)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
at scala.collection.immutable.Map$Map1.foreach(Map.scala:109)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
at sbt.Load$.checkAll(Load.scala:396)
at sbt.Load$.loadURI(Load.scala:321)
at sbt.Load$.load(Load.scala:316)
at sbt.Load$.load(Load.scala:305)
at sbt.Load$$anonfun$4.apply(Load.scala:146)
at sbt.Load$$anonfun$4.apply(Load.scala:146)
at sbt.Load$.timed(Load.scala:1025)
at sbt.Load$.apply(Load.scala:146)
at sbt.Load$.defaultLoad(Load.scala:39)
at sbt.BuiltinCommands$.liftedTree1$1(Main.scala:548)
at sbt.BuiltinCommands$.doLoadProject(Main.scala:548)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:540)
at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:540)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:59)
at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:59)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61)
at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:61)
at sbt.Command$.process(Command.scala:93)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96)
at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:96)
at sbt.State$$anon$1.doX$1(State.scala:183)
at sbt.State$$anon$1.process(State.scala:190)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96)
at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:96)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
at sbt.MainLoop$.next(MainLoop.scala:96)
at sbt.MainLoop$.run(MainLoop.scala:89)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:68)
at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:63)
at sbt.Using.apply(Using.scala:24)
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:63)
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:46)
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:30)
at sbt.MainLoop$.runLogged(MainLoop.scala:22)
at sbt.StandardMain$.runManaged(Main.scala:109)
at sbt.xMain.run(Main.scala:38)
at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
at xsbt.boot.Launch$.run(Launch.scala:109)
at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
at xsbt.boot.Launch$.launch(Launch.scala:117)
at xsbt.boot.Launch$.apply(Launch.scala:18)
at xsbt.boot.Boot$.runImpl(Boot.scala:41)
at xsbt.boot.Boot$.main(Boot.scala:17)
at xsbt.boot.Boot.main(Boot.scala)
[error] No project 'lettergenerator' in 'file:/home/claudiusbr/test/play-scala-starter-example/'.
[error] Valid project IDs: root
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? q

我尝试查看似乎是一个类似问题的不同错误,但我看不到任何似乎对我的问题有帮助的东西。

我正在使用sbt版本0.13.16Scala 2.12.3为我的lettergenerator,但我分别尝试了这些和0.13.15/2.12.2,用于我的play项目的build.sbt,但都没有奏效。

我可能错过了一些明显的东西,但到目前为止,我不确定我还能做什么,所以希望得到任何帮助。

我认为您需要lettergenerator指向项目的正确子目录,即替换

lazy val lettergenerator = project

lazy val lettergenerator = project.in(file("lettergenerator"))

对于多个子项目,我建议从默认的播放布局切换到默认的 SBT 布局,并将播放应用程序移动到单独的子目录中,即backendserver或其他什么。

我还建议不要为不同的子项目使用多个build.sbt文件。 根据我的经验,这不能很好地扩展,并且随着子项目变得更加复杂,很快就会变得混乱。

相反,我建议保留单个顶级build.sbt并在.settings中定义每个项目的所有设置。 对于影响整个项目的常见设置,例如,version,我在root项目上使用.settings(inThisBuild(…))(简单示例或更复杂的现实世界示例(。

最新更新