如何在SBT中发布具有pom包装的工件?

如何在SBT中发布具有pom包装的工件?,sbt,Sbt,我在SBT中有一个多项目构建,其中一些项目应该聚合依赖项,并且不包含任何代码。因此,客户机可以将这些项目作为单个依赖项来依赖,而不是直接依赖于它们所有的聚合依赖项。对于Maven,这是一种常见的模式,例如在使用SpringBoot时 在SBT中,我想我可以通过将此设置添加到这些项目来抑制空工件的生成: packagedArtifacts := Classpaths.packaged(Seq(makePom)).value 但是,makePom任务在生成的POM中写入jar。但是现在已经没有JA

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

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

packagedArtifacts := Classpaths.packaged(Seq(makePom)).value
但是,makePom任务在生成的POM中写入jar。但是现在已经没有JAR了,应该改为pom


我该怎么做呢?

也许你可以修改这里描述的结果pom:

也许你可以修改这里描述的结果pom:

这个问题有点老了,但我只是遇到了同样的问题并找到了解决方案。最初的答案指向了正确的页面,在那里可以找到这些信息,但这里有一个例子。它使用pomPostProcess设置在将生成的POM写入磁盘之前对其进行转换。本质上,我们遍历所有XML节点,寻找我们关心的元素,然后重写它

导入scala.xml。{Node=>XmlNode,NodeSeq=>XmlNodeSeq,} 导入scala.xml.transform_ pomPostProcess:={node:XmlNode=> val规则=新规则{ 覆盖def transformn:XmlNode:XmlNodeSeq=n匹配{ 案例e:如果e!=null和&e.label==packaging=> 聚甲醛 大小写=>n } } 新规则TransformerRule.transformnode.head },
这个问题有点老了,但我只是遇到了同样的问题并找到了解决方案。最初的答案指向了正确的页面,在那里可以找到这些信息,但这里有一个例子。它使用pomPostProcess设置在将生成的POM写入磁盘之前对其进行转换。本质上,我们遍历所有XML节点,寻找我们关心的元素,然后重写它

导入scala.xml。{Node=>XmlNode,NodeSeq=>XmlNodeSeq,} 导入scala.xml.transform_ pomPostProcess:={node:XmlNode=> val规则=新规则{ 覆盖def transformn:XmlNode:XmlNodeSeq=n匹配{ 案例e:如果e!=null和&e.label==packaging=> 聚甲醛 大小写=>n } } 新规则TransformerRule.transformnode.head },
您可以禁用发布JAR、源代码和文档的默认工件,然后显式选择发布POM。sbt仅使用POM生成和发布POM

//这个项目没有源代码,我想pom的依赖关系 lazy val bundle=project .dependsOnmoduleA,moduleB .设置 publishArtifact:=false,//禁用jar、源、文档 makePom中的publishArtifact:=true, 惰性val moduleA=项目 lazy val moduleB=项目 lazy val moduleC=项目 运行sbt bundle/publishM2以验证~/.m2/存储库中的POM


我敢说这几乎是直观的,这是sbt难得的惊喜时刻您可以禁用发布JAR、sources和docs的默认工件,然后显式选择发布POM。sbt仅使用POM生成和发布POM

//这个项目没有源代码,我想pom的依赖关系 lazy val bundle=project .dependsOnmoduleA,moduleB .设置 publishArtifact:=false,//禁用jar、源、文档 makePom中的publishArtifact:=true, 惰性val moduleA=项目 lazy val moduleB=项目 lazy val moduleC=项目 运行sbt bundle/publishM2以验证~/.m2/存储库中的POM


我敢说这几乎是直观的,这是sbt难得的惊喜。我以前尝试过这个,我可以在那里包括一个包装元素,但它被忽略了。看起来你在看pomExtra的设置。关键是使用如下所示的pomPostProcess设置。我以前尝试过,我可以在其中包含一个打包元素,但它被忽略。您似乎正在查看pomExtra设置。关键是要使用如下所示的pomPostProcess设置。这是可行的,对于sbt没有做您想做的事情的情况可能很有用。我已经提交了一个答案,它可以做你想做的事情,而无需直接操纵XML。这是一个成功的方法,对于sbt做不到你想做的事情的情况可能很有用。我已经提交了一个答案,它可以在不直接操作XML的情况下做你想做的事情。这应该是公认的答案这应该是公认的答案