java - build.sbt 配置使用 sbt packageSrc 添加外部 java 文件

标签 java package sbt

我正在使用 sbt-xjc 插件从 XSD 文件生成 java 类。该插件在 project/target/scala-2.10/xjc 目录下生成这些类。 我需要创建 2 个 jar 文件,一个包含所有 .class 文件,另一个包含所有 .java 源文件。 我能够使用 sbt package 生成包含所有 .class 文件的 jar 文件,但问题出在 sbt packageSrc 上,此命令仅查找 sbt packageSrc 中的文件夹code>project/src/java 文件夹,不考虑 project/target/scala-2.10/xjc 下 sbt-xjc 插件生成的文件。我可以提供任何可以提供帮助的配置吗?

最佳答案

要了解为什么会发生这种情况,命令 inspect tree packageSrc 很有帮助,它还会告诉您要更改哪些内容才能包含源代码。

执行时应该显示如下内容:

> inspect tree packageSrc
[info] compile:packageSrc = Task[java.io.File]
[info]   +-compile:packageSrc::packageConfiguration = Task[sbt.Package$Configuration]
[info]   | +-compile:packageSrc::mappings = Task[scala.collection.Seq[scala.Tuple2[java.io.File, java.lang.String]]]
[info]   | | +-compile:unmanagedSources = Task[scala.collection.Seq[java.io.File]]
[info]   | | +-compile:unmanagedResources = Task[scala.collection.Seq[java.io.File]]
[info]   | | +-compile:unmanagedResourceDirectories = List(/tmp/q-23437043/src/main/resources)
[info]   | | +-*:baseDirectory = /tmp/q-23437043
[info]   | | +-compile:unmanagedSourceDirectories = List(/tmp/q-23437043/src/main/scala, /tmp/q-23437043/src/main/java)

// more stuff but not relevant for us

您可以从那里看到 SBT 使用 mappings 键来了解从何处获取文件。

知道我们可以获取生成的文件并将它们添加到 build.sbtpackageSrc 的映射中:

import Path.flat

xjcSettings

def xjcSources(base: File) = base ** "*"

mappings in Compile in packageSrc ++= xjcSources((sourceManaged in (Compile, xjc)).value) pair flat

您可以阅读有关 Mappings 的更多信息和 Paths自定义/控制结果。

关于java - build.sbt 配置使用 sbt packageSrc 添加外部 java 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437043/

相关文章:

Java - 将子类传递给类型为父类(super class)的构造函数

Java - 加载带注释的类

docker - alpine `apk` 是否有 ubuntu `apt` `--no-install-recommends` 等价物

scala - 对象spark不是包org的成员

java - Eclipse 之外的 Tomcat 6 上的 JSF PropertyNotFound 异常

java - 删除数组中的零的输出未按预期输出?

Android 发布到 Google Play 多个包

r - R 包的 tests/和 inst/tests/之间的区别

scala - 为什么我的项目没有 build.sbt 文件?

scala - 是否有一种 Python-ealy 方式来运行具有依赖项的 Scala 脚本?