sbt: 发布生成的源代码

10

我有一个项目,其中一部分源码是通过Compile sourceGenerators生成的。我注意到(在大多数情况下是合理的),这些源码不会随publishLocalpublishSigned一起发布。在这种情况下,这很不幸,因为当您将此项目/库用作依赖项时,即使已下载其他项目的源代码,您也无法查找源代码,例如在IntelliJ中。

我能否配置sbt的发布设置以将生成的源代码包括在Maven的-sources.jar中?

3个回答

12

所以,为了完整起见,这是基于 @pfn 回答的我的解决方案:

mappings in (Compile, packageSrc) ++= {
  val base  = (sourceManaged  in Compile).value
  val files = (managedSources in Compile).value
  files.map { f => (f, f.relativeTo(base).get.getPath) }
}

7
mappings in (Compile,packageSrc) := (managedSources in Compile).value map (s => (s,s.getName)),

1
这应该是 ++= 而不是 :=,这样常规的源就不会被删除了吧? - 0__
1
是的,++= 是正确的。我特别使用它只与生成的源而没有常规源,因此使用 :=。 - pfn
此外,如果存在冲突,您需要正确设置路径,而不是使用s.getName - pfn

2

就像 @0__ 的回答一样,但是移植到了“新”的 sbt 语法,即没有弃用警告。

Compile/packageSrc/mappings ++= {
  val base  = (Compile/sourceManaged).value
  val files = (Compile/managedSources).value
  files.map(f => (f, f.relativeTo(base).get.getPath))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接