【问题标题】:How to share resources between projects in SBT如何在 SBT 中的项目之间共享资源
【发布时间】:2012-09-19 12:24:22
【问题描述】:

我正在从事的项目是Lift 框架上的网络应用程序。我们也在使用xsbt web plugin。有一个“核心”项目,其中包含绝大多数功能;我目前的目标是创建两个“分发”项目,将一组不同的类路径资源添加到“核心”项目。问题是我要么 1) 无法运行“分发”项目,要么 2) 让它们运行,但所需的资源似乎不存在。

我的尝试

这是我的project/Build.scala 的删节版:

lazy val core = Project("Core", file("core"))
  .settings( /*some dependencies, resolvers, webSettings */ )

lazy val app1 = Project("App1", file("app1"))
  .aggregate(core)
  .settings( /*the same settings as core */ )

lazy val app2 = Project("App2", file("app2"))
  .aggregate(core)
  .settings( /*the same settings as core*/ )

然后在app1app2 的目录结构中,我在src/main/resources/aFileINeed 有一个文件。核心应用程序使用class.getResource 方法从类路径加载文件。

问题

如果我尝试使用container:start 运行其中一个分发项目,它不会在类路径中检测到所需的文件。此外,它声称src/main/webapp 不是现有目录(该文件夹包含在核心项目中,因为它是 xsbt Web 插件所必需的)。

我怎样才能让这些项目“合并”它们的资源?我希望在 Build.scala 项目定义中使用 aggregatedependsOn 可以为我解决这个问题,但显然没有。

【问题讨论】:

    标签: scala sbt xsbt-web-plugin


    【解决方案1】:

    这就是我正在做的。我在项目的根目录中创建了一个全局“资源”目录,然后是以下变量:

        lazy val globalResources = file("resources")
    

    然后在每个项目的设置中:

        unmanagedResourceDirectories in Runtime += globalResources 
    

    对于使用 xsbt-web-plugin 或其他导入它的库的项目,您必须使用更强的

        unmanagedResourceDirectories in Compile += globalResources
    

    请注意,使用此解决方案,您的项目可能会有多个资源目录,如果您两次定义同一个文件,AFAIK compile:copy-resources 会生您的气。

    【讨论】:

    • 如果globalResources 最终变得复杂,您也可以将其升级为Project 并从其他projects 引用其资源
    猜你喜欢
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多