如何让 sbt 将非 Java 源包含到已发布的工件中?

exp*_*ert 8 scala sbt

如何让 sbt 将非 Java 源包含到已发布的工件中?

我正在使用 Kotlin 插件,但不知道如何强制 sbt 将 .kt 文件包含到已发布的源 jar 中。它只包含 .java 文件。

网上很多人建议将以下代码添加到 sbt 脚本中,但没有帮助

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) }
},
Run Code Online (Sandbox Code Playgroud)

我也试过

includeFilter in (Compile, packageSrc) := "*.scala" || "*.java" || "*.kt",
Run Code Online (Sandbox Code Playgroud)

这是 sbt 控制台中一些变量的输出

sbt:collections> show unmanagedSourceDirectories
[info] * /home/expert/work/sideprojects/unoexperto/extensions-collections/src/main/scala
[info] * /home/expert/work/sideprojects/unoexperto/extensions-collections/src/main/java
[info] * /home/expert/work/sideprojects/unoexperto/extensions-collections/src/main/kotlin

sbt:collections> show unmanagedSources
[info] * /home/expert/work/sideprojects/unoexperto/extensions-collections/src/main/java/com/walkmind/extensions/collections/TestSomething.java
Run Code Online (Sandbox Code Playgroud)

小智 0

你在 kotlin 上使用哪个插件?

https://github.com/pfn/kotlin-plugin可以选择kotlinSource配置源目录所在的位置。

sbt packageBin编译 kotlin 文件并将它们包含到输出 jar 中。

构建.sbt

// define kotlin source directory
kotlinSource in Compile := baseDirectory.value / "src/main/kotlin",
Run Code Online (Sandbox Code Playgroud)

src/main/kotlin/org.test

package org.test

fun main(args: Array<String>) {
    println("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)

安慰

package org.test

fun main(args: Array<String>) {
    println("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)

目标/scala-2.13

jar 包含 MainKt.class

并且文件夹 org/test 也包含 MainKt.class。

这能解决你的问题吗?