Question

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?

Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top