我在SBT中有一个多项目构建,其中一些项目应该聚合依赖项并且不包含代码。因此,客户端可以依赖这些项目作为单个依赖项,而不是直接依赖于它们的所有聚合依赖项。对于Maven,这是一种常见的模式,例如使用Spring Boot时。
在SBT中,我想通过将这个设置添加到这些项目中可以抑制空工件的生成:
packagedArtifacts := Classpaths.packaged(Seq(makePom)).value
但是,makePom
任务在生成的POM中写入<packaging>jar</packaging>
。但是现在不再有JAR,而应该改为<packaging>pom</packaging>
。
我该怎么做?
答案 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页可能会有所帮助,也许应该在此处添加此技巧。