将包含Symlinks的Java源文件夹添加到build.sbt文件

时间:2017-10-02 23:06:51

标签: java scala sbt

我正在处理遗留代码仓库,我想将Scala项目添加到其中。这是目录树:

LegacyFolder
|
--JavaSourceDir1
|---SymLink to "LegacyFolder"
--JavaSourceDir2
|---SymLink to "LegacyFolder"
--MyProject

我想在我的项目中使用JavaSourceDir1和JavaSourceDir2中的Java文件(作为依赖项)。第一个想法是将它们添加为非托管源文件。像这样:

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

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

问题在于JavaSourceDir1/2内的所有符号链接,它们使SBT变得疯狂并且它在运行/编译命令上挂起。这是有道理的,因为SBT处于无限循环中以查找文件。

那么,我该如何解决这个问题呢?有没有办法只能非递归地在这些文件夹中获取Java文件,并以某种方式将它们作为依赖项添加?

1 个答案:

答案 0 :(得分:2)

您可以定义一个直接在名为*.java的给定目录下检索legacyJavaSources个文件的函数,并将结果提供给unmanagedSources in Compile

lazy val root = (project in file("."))
  .settings(
    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
}