SBT:访问子项目的托管资源?

时间:2013-02-06 09:44:16

标签: scala plugins sbt

在SBT插件中,我正在尝试访问子项目的托管资源。

这是构建文件:

import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {
  val appName         = "demo"
  val appVersion      = "1.0-SNAPSHOT"
  val appDependencies = Seq(
    "org.jruby" % "jruby-complete" % "1.7.1"
  )

  val widgets = play.Project("widgets", appVersion, appDependencies, path = file("widgets"))
  val main = play.Project(appName, appVersion, appDependencies, path = file("demo"))
    .dependsOn(widgets)

}

我正在使用plugins.sbt。

中定义的SBT插件

现在,我需要在编译父项目(演示)期间使用子项目(小部件)中的资源文件。

到目前为止,我最接近的是buildDependencies设置键 - 但我只获取了ProjectRef对象,唯一的信息是构建基础和项目ID。我无法找到进入该项目资源目录的方法。

2 个答案:

答案 0 :(得分:1)

我不熟悉编写插件,但是至少在您的pool中,您可以define the resource file

或者,再次在build.sbt中,您可以create a "common" project that others reference,例如:

build.sbt

然后其他代码(例如Task)可以像这样引用:

lazy val common = (project in file("common"))
  .settings(
    Seq(
      includeFilter in unmanagedResources := new SimpleFileFilter(_.getCanonicalPath.startsWith((sourceDirectory.value / "main" / "resources").getCanonicalPath))
    )
  )

因此您的其他项目可以运行此程序或reference that directory

希望有一种简单的方法可以为插件还是构建实现其中一种解决方案?

答案 1 :(得分:0)

不幸的是我不相信这是可能的。我尝试了类似的东西,但在文档中找到了以下内容:

  

注意:在运行时,所有构建的所有插件都加载在类加载器的单独的父类加载器中以进行构建。这意味着插件不会从构建定义

中看到类或资源

请参阅:SBT Plugins