2

currently I have a sbt multi project with one main project. The other projects are just aggregate's or a scalaJS project so my project definition is somewhat like that:

lazy val auth = project

lazy val utils = project

lazy val client = project

lazy val main = project
.dependsOn(utils).aggregate(utils)
.dependsOn(auth).aggregate(auth)
.aggregate(clients.map(projectToRef): _*)

However on publishing I get that:

java.lang.RuntimeException: Repository for publishing is not specified.
        at scala.sys.package$.error(package.scala:27)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at scala.Option.getOrElse(Option.scala:120)
        at sbt.Classpaths$.getPublishTo(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
java.lang.RuntimeException: Repository for publishing is not specified.
        at scala.sys.package$.error(package.scala:27)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at scala.Option.getOrElse(Option.scala:120)
        at sbt.Classpaths$.getPublishTo(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
java.lang.RuntimeException: Repository for publishing is not specified.
        at scala.sys.package$.error(package.scala:27)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$getPublishTo$1.apply(Defaults.scala:1470)
        at scala.Option.getOrElse(Option.scala:120)
        at sbt.Classpaths$.getPublishTo(Defaults.scala:1470)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at sbt.Classpaths$$anonfun$59.apply(Defaults.scala:1150)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[error] (client/*:publishConfiguration) Repository for publishing is not specified.
[error] (auth/*:publishConfiguration) Repository for publishing is not specified.
[error] (utils/*:publishConfiguration) Repository for publishing is not specified.

Currently my main project gets uploaded sucessful however I get a exit code 1 which is bad for my CI server.

Is there a way to disable it for these subprojects?

Edit: Also I use sbt-native-packager for publishing i.e.:

makeDeploymentSettings(Universal, packageBin in Universal, "tgz")

And the command I'm using

sbt universal:publish
Christian Schmitt
  • 837
  • 16
  • 47

2 Answers2

1

You have to provide the publishTo setting for all your modules. This may be achieved by having a common object with all your settings, including publishTo. These settings can then be imported to build.sbt in all your modules.

So you can have a file, say Common.scala, which looks like this:

object Common {
    val settings: Seq[Setting[_]] = Seq(
        scalaVersion := "Your Scala version",
        publishTo <<= Some("your repo" at "http://yourserver.com")
    )
    val nonPublishSettings = settings ++ Seq(
        publish := { }
    )
}

Now modify your build.sbt like this:

Common.settings

lazy val auth = project

lazy val utils = project.settings(Common.nonPublishSettings) // This module will not be published. All others will be.

lazy val client = project

lazy val main = project
                .dependsOn(utils).aggregate(utils)
                .dependsOn(auth).aggregate(auth)
                .aggregate(clients.map(projectToRef): _*)

Thus, the solution to your problem is to explicitly tell sbt which modules to publish and where.

Seth Tisue
  • 29,985
  • 11
  • 82
  • 149
Gaurav
  • 96
  • 2
0

This looks like a configuration error. The main project aggregates all other projects, which means every command you execute on the main project will be executed on the projects listed in aggregate function.

I assume that you specified a repository with

publishTo := Some("your repo" at "http://yourcompany.com")

which is only set on your main project. So, when you run universal:publish all sub projects get published as well.

Here is another Stackoverflow question on how to disable publish on single projects.

Community
  • 1
  • 1
Muki
  • 3,513
  • 3
  • 27
  • 50