2012-09-27 207 views
3

我在工作中的项目是Lift框架上的web应用程序。我们也使用xsbt web plugin。有一个“核心”项目,其中包含绝大多数的功能;我目前的目标是创建两个“分发”项目,为“核心”项目添加一组不同的类路径资源。问题是我要么1)不能让“分发”项目运行,要么2)让它们运行,但所需的资源似乎并不存在。如何在SBT中的项目之间共享资源

我已经试过

这里是我的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会为我处理这个问题,但它显然没有。

回答

2

这就是我正在做的。我在该项目的根目录中创建一个全球性的“资源”目录,然后将下面的变量:

lazy val globalResources = file("resources") 

然后在每个项目的设置:

unmanagedResourceDirectories in Runtime += globalResources 

对于使用xsbt-web项目-plugin或进口它的一些其他图书馆,你必须使用更强的

unmanagedResourceDirectories in Compile += globalResources 

要注意的是使用该解决方案您的项目将可能有muliple资源目录和AFAI K如果你定义两次相同的文件compile:copy-resources会对你生气。

相关问题