如何让 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。
这能解决你的问题吗?