2015-12-05 80 views
2

目前我有一个主项目的sbt多项目。 其他项目都只是聚集的或scalaJS项目,所以我的项目定义是有点像:禁止发布子项目

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): _*) 

但是在出版我得到的是:

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. 

目前我的主要项目获取但是上传SUCESSFUL我得到一个退出代码1,这对我的CI服务器不利。

有没有办法为这些子项目禁用它?

编辑:另外我用SBT-本机打包用于发布即:

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

,命令我使用

sbt universal:publish 

回答

0

这看起来像一个配置错误。主项目汇总所有其他项目,这意味着您在main项目上执行的每个命令都将在aggregate函数中列出的项目上执行。

我假设你指定的仓库与

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

这是只有在您的主要项目设置。因此,当您运行universal:publish时,所有子项目也会发布。

Here is another Stackoverflow有关如何禁用单个项目发布的问题。

1

您必须为您的模块提供全部publishTo设置。 这可以通过与所有设置有共同的对象来实现,包括publishTo。然后可以将这些设置导入到所有模块的build.sbt中。

所以,你可以有一个文件,说Common.scala,它看起来像这样:

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

现在修改build.sbt这样的:

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): _*) 

因此,解决你的问题是明确告诉sbt要发布哪些模块以及在哪里。