Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't use sbt 0.13.7 with Play subprojects

I have a sample Play 2.3.8 project that is composed by two subprojects (common and common2):

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

And in the main build.sbt the dependency to those two subprojects is defined as:

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)

and this works as expected. Now I am trying to make this project use sbt 0.13.7 (currently it uses 0.13.5) and when I start activator I always get a error like this (Test is the root of my project):

[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.

So what could be the problem? Have the way to define subprojects changed? I have looked at the changes from 0.13.5 to 0.13.7 and can't find nothing related to this...

like image 448
Salem Avatar asked Mar 16 '23 23:03

Salem


2 Answers

Indeed it seems that something changed between sbt 0.13.5 and 0.13.6. In my sample project I have all the subprojects defined in the main build.sbt, but had also them redefined inside the subprojects folder.

So in common/build.sbt for example, the subproject is defined again as

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

This works well in 0.13.5, but breaks after that.

So the solution was to remove those lines and only define the subprojects in the main build.sbt.

like image 114
Salem Avatar answered Apr 06 '23 16:04

Salem


This issue was also discussed in May 2016 here: SBT: How to define dependencies of subprojects in subprojects' build.sbt files? The answer in the comments is also basically that SBT doesn't want you to have build.sbt files in your subprojects of multiproject builds.

like image 41
psfblair Avatar answered Apr 06 '23 16:04

psfblair