【问题标题】:Prevent sbt from publishing an automatically aggregated root project防止 sbt 发布自动聚合的根项目
【发布时间】:2018-05-20 20:10:27
【问题描述】:

我有一个 sbt 多项目构建,其中包含两个项目 coremac。我没有聚合它们的根项目。不幸的是sbt does create one automatically

如何防止发布此虚拟聚合项目?当我运行sbt publish-local 时,除了coremac 之外,我得到类似"default-6a1ca6" 的东西。

我正在寻找类似的东西

autoRoot := false

?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    对于 sbt 1.x 你也可以使用

    lazy val root = (project in file(".")).
        aggregate(core, mac).
        settings(
            skip in publish := true
        )
    

    https://github.com/sbt/sbt/issues/3136

    【讨论】:

      【解决方案2】:

      tl;dr 使用packagedArtifacts in file(".") := Map.empty

      使用最新的 SBT 0.13.1 和以下两个文件(项目内没有其他文件):

      build.sbt

      lazy val core = project
      
      lazy val mac = project
      

      project/build.properties

      sbt.version=0.13.1
      

      ...执行sbt publish-local 给出:

      $ sbt publish-local
      ...
      [info] Set current project to root-0__multi (in build file:/Users/jacek/sandbox/so/0__multi/)
      ...
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/poms/mac_2.10.pom
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/jars/mac_2.10.jar
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/srcs/mac_2.10-sources.jar
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/docs/mac_2.10-javadoc.jar
      [info]  published ivy to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [info]  published root-0__multi_2.10 to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/poms/root-0__multi_2.10.pom
      [info]  published root-0__multi_2.10 to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/jars/root-0__multi_2.10.jar
      [info]  published root-0__multi_2.10 to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/srcs/root-0__multi_2.10-sources.jar
      [info]  published root-0__multi_2.10 to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/docs/root-0__multi_2.10-javadoc.jar
      [info]  published ivy to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/poms/core_2.10.pom
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/jars/core_2.10.jar
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/srcs/core_2.10-sources.jar
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/docs/core_2.10-javadoc.jar
      [info]  published ivy to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [success] Total time: 2 s, completed Feb 4, 2014 1:38:28 AM
      

      这意味着默认情况下所有项目都已发布。

      但是,当您为当前(根)项目添加设置 packagedArtifacts in file(".") := Map.empty 以设置 packagedArtifacts 时:

      build.sbt

      lazy val core = project
      
      lazy val mac = project
      
      packagedArtifacts in file(".") := Map.empty
      

      ...执行sbt publish-local 给出:

      $ sbt publish-local
      ...
      [info] Set current project to root-0__multi (in build file:/Users/jacek/sandbox/so/0__multi/)
      ...
      [info]  published ivy to /Users/jacek/.ivy2/local/default/root-0__multi_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/poms/core_2.10.pom
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/jars/core_2.10.jar
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/srcs/core_2.10-sources.jar
      [info]  published core_2.10 to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/docs/core_2.10-javadoc.jar
      [info]  published ivy to /Users/jacek/.ivy2/local/core/core_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/poms/mac_2.10.pom
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/jars/mac_2.10.jar
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/srcs/mac_2.10-sources.jar
      [info]  published mac_2.10 to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/docs/mac_2.10-javadoc.jar
      [info]  published ivy to /Users/jacek/.ivy2/local/mac/mac_2.10/0.1-SNAPSHOT/ivys/ivy.xml
      [success] Total time: 1 s, completed Feb 4, 2014 1:39:34 AM
      

      没有发布当前(根)项目。

      【讨论】:

        【解决方案3】:

        This answer 是一种解决方法:创建一个显式根项目并禁用它的发布。不过,我希望有一个更简单的方法。

        【讨论】:

        • 您似乎使用的是 0.13 之前的版本(因为名称是 default-... 并且应该是主目录的名称),不是吗? packagedArtifacts in file(".") := Map.empty 呢?它在 SBT 0.13.2-M1 上运行良好。
        • 我用的是最新的stable,0.13.1
        • 很奇怪。不知何故,你和我的运行输出不同,但我在两个不同的操作系统 - Windows 7 和 Mac OS X 上测试了 SBT 0.13.1 和 0.13.2-M1。
        猜你喜欢
        • 2015-09-05
        • 2018-03-13
        • 2015-12-02
        • 2013-11-06
        • 2016-03-05
        • 1970-01-01
        • 2018-06-28
        • 2020-02-21
        • 2015-05-28
        相关资源
        最近更新 更多