SBT:访问管理子项目的资源呢?(SBT: Access managed resources of

2019-08-16 19:30发布

在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。 我无法找到一种方式来获得该项目的资源目录。

Answer 1:

我不熟悉编写插件,但至少在你build.sbt您可以定义资源文件 。

或者,再在build.sbt你可以创建一个“普通”的项目,别人引用 ,如:

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

然后其他代码(例如,任务)可以引用此类似:

lazy val doSomething = taskKey[Seq[File]]("Does something useful")
lazy val doSomethingSetting = doIt := {

  val resourceDir = (resourceDirectory in common in Compile).value
  println(resourceDir)

}

所以,你的其他项目可以运行这个或引用目录

但愿有实现一个插件VS构建这些解决方案的一个直接的方式?



Answer 2:

不幸的是,我不相信这是可能的。 我想类似的东西,但发现该文档中的以下:

注:在运行时,所有的所有的插件版本是加载到类加载器为建立一个独立的,父类加载器。 这意味着插件不会看到生成定义类或资源

请参阅: SBT插件



文章来源: SBT: Access managed resources of a subproject?