tesnik03
tesnik03

Reputation: 1359

build.sbt configuration to add external java files using sbt packageSrc

I am using sbt-xjc plugin to generate java classes from XSD files. The plugin generates these classes under project/target/scala-2.10/xjc directory. I need to create 2 jar files one with all .class files and another with all .java source files. I am able to generate the jar file that has all .class files using sbt package but the issue is with sbt packageSrc, this command is looking only for folder those are in project/src/java folder and not considering files those are generated by sbt-xjc plugin under project/target/scala-2.10/xjc. Is there any configuration that i can provide that could help?

Upvotes: 0

Views: 717

Answers (1)

lpiepiora
lpiepiora

Reputation: 13749

To know why this happens the command inspect tree packageSrc is helpful, it will also tell you what to change to have your sources included.

When executed should show you something like this:

> 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

You can see from there that SBT is using mappings key to know from where to take the files.

Knowing that we can take the generated files and add them to the mappings in packageSrc in your build.sbt:

import Path.flat

xjcSettings

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

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

You can read more about Mappings and Paths to customize / control the result.

Upvotes: 1

Related Questions