SBT访问子目录

时间:2013-05-25 15:35:21

标签: scala build-automation sbt

我的项目文件结构如下所示:

  • build.sbt
  • LIB
  • 项目
  • SRC
  • 测试

lib内部文件夹中,我有包含其他jar文件的子文件夹。如何让SBT识别子文件夹或递归处理jar文件?

编辑: 感谢@Jhonny Everson,我能够做到这一点。方法如下: 在我的build.sbt中添加了以下行

unmanagedJars in Compile <++= baseDirectory map { base =>
        val baseDirectories = (base / "lib" / "mycustomlib" )
        val customJars = (baseDirectories ** "*.jar")
        customJars.classpath
}

请注意,基本目录是build.sbt所在的位置。

2 个答案:

答案 0 :(得分:2)

如果你把jar放在lib文件夹上,Sbt会自动使用它们。您可以使用unmanagedJars指令指定可以在其中找到jar文件的多个目录。见https://github.com/harrah/xsbt/wiki/Library-Management#manual-dependency-management

答案 1 :(得分:1)

我想实现类似vim病原体的东西,这就是我想出的:

unmanagedJars in Compile ++= {
  val libs = baseDirectory.value / "lib"
  val subs = (libs ** "*") filter { _.isDirectory }
  val targets = ( (subs / "target") ** "*" ) filter {f => f.name.startsWith("scala-") && f.isDirectory}
  ((libs +++ subs +++ targets) ** "*.jar").classpath
}

使用 sbt 0.13.x 或依赖它的任何类型的安全激活器,这将检查/lib/lib/*/lib/*/target/scala-*是否有JAR并将其加载到类路径。如果示例不够明确,无法了解正在发生的情况,则可能有助于了解baseDirectory.valuelibssubstargetssbt.Pathfinder个实例