如何在SBT中发布带有pom-packaging的工件?

时间:2017-09-16 14:01:48

标签: sbt

我在SBT中有一个多项目构建,其中一些项目应该聚合依赖项并且不包含代码。因此,客户端可以依赖这些项目作为单个依赖项,而不是直接依赖于它们的所有聚合依赖项。对于Maven,这是一种常见的模式,例如使用Spring Boot时。

在SBT中,我想通过将这个设置添加到这些项目中可以抑制空工件的生成:

packagedArtifacts := Classpaths.packaged(Seq(makePom)).value

但是,makePom任务在生成的POM中写入<packaging>jar</packaging>。但是现在不再有JAR,而应该改为<packaging>pom</packaging>

我该怎么做?

2 个答案:

答案 0 :(得分:1)

也许你可以修改结果pom,如下所述:Modifying the generated POM

答案 1 :(得分:0)

您可以禁用发布JAR,源和文档的默认工件,然后显式选择发布POM。 sbt仅使用<packaging>pom</packaging>来生成和发布POM。

// This project has no sources, I want <packaging>pom</pom> with dependencies
lazy val bundle = project
  .dependsOn(moduleA, moduleB)
  .settings(
    publishArtifact := false, // Disable jar, sources, docs
    publishArtifact in makePom := true,
  )

lazy val moduleA = project
lazy val moduleB = project
lazy val moduleC = project

运行sbt bundle/publishM2来验证~/.m2/repository中的POM。

我敢说这几乎是 直观的,难得的是sbt令人惊喜的时刻

我用最新的sbt 1.3.9和1.0.1(我刚安装在计算机上的最旧的启动器)确认了这一点。

参考文档中的Artifacts页可能会有所帮助,也许应该在此处添加此技巧。