Omid Omid - 3 years ago 264
Java Question

Add Java source folder containing Symlinks to build.sbt file

I am working on a legacy code repo that I want to add my Scala project to it. Here is the directory tree:

|---SymLink to "LegacyFolder"
|---SymLink to "LegacyFolder"

I want to use the Java files in JavaSourceDir1 and JavaSourceDir2 in my project (as a dependency). The first idea was to add them as unmanaged source files. Something like this:

unmanagedSourceDirectories in Compile += baseDirectory.value / "../JavaSourceDir1"

unmanagedSourceDirectories in Compile += baseDirectory.value / "../JavaSourceDir2"

The problem is with all those Symlinks inside the
, they make SBT crazy and it hangs on Run/Compile commands. It makes sense because SBT is in an infinite loop to find the files.

So, how can I resolve this? Is there any way to only get Java files in those folders non-recursively and somehow add them as dependencies?

Answer Source

You can define a function that retrieves *.java files directly under a given directory called legacyJavaSources, and feed the result into unmanagedSources in Compile:

lazy val root = (project in file("."))
    unmanagedSources in Compile ++=
      legacyJavaSources(baseDirectory.value.getParentFile / "JavaSourceDir1"),

    unmanagedSources in Compile ++=
      legacyJavaSources(baseDirectory.value.getParentFile / "JavaSourceDir2")

def legacyJavaSources(dir: File): Vector[File] = {
  (dir * "*.java").get.toVector
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download