【问题标题】:build.sbt configuration to add external java files using sbt packageSrcbuild.sbt 配置使用 sbt packageSrc 添加外部 java 文件
【发布时间】:2014-05-03 06:56:34
【问题描述】:

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

【问题讨论】:

    标签: java package sbt


    【解决方案1】:

    要知道为什么会发生这种情况,命令 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.sbt 中的packageSrc 的映射中:

    import Path.flat
    
    xjcSettings
    
    def xjcSources(base: File) = base ** "*"
    
    mappings in Compile in packageSrc ++= xjcSources((sourceManaged in (Compile, xjc)).value) pair flat
    

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

    【讨论】:

    • 感谢您的回答
    • 没问题。如果它对您有用,您可能希望接受答案。
    猜你喜欢
    • 2014-05-22
    • 2018-04-13
    • 1970-01-01
    • 2015-05-29
    • 2019-07-15
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多