【发布时间】:2014-03-09 19:15:22
【问题描述】:
我正在 Gradle-fying 一个具有以下结构的遗留项目:
root
+--- common
| \--- config
+--- module1
\--- module2
在原始项目中,config 只是一个文件夹,其中包含针对不同环境组织在子文件夹中的配置文件。它包含一个顶级文件夹 props 和许多子文件夹,如下所示:
config
\--- props
+--- prod
+--- dev
+--- john
\--- mike
可以将项目配置为使用任何子文件夹。配置由如下所示的方法加载:
Config.class.getClassLoader().getResourceAsStream("props/" + ENV + "/" + name);
其中ENV定义环境(它是系统属性),即可以是prod、dev、mike等,而name只是要加载的文件的名称.
运行测试时,我需要在类路径中有props 文件夹。在构建生产工件(JAR 和 WAR)时,我不想避免这种情况,只手动复制我需要的文件以避免可能的冲突或事故。
所以我决定让config 成为它自己的 Gradle 项目,并将其作为 testCompile 依赖项添加到其他需要配置的模块中。但是,如果我将 props 文件夹添加为 Gradle 中的资源文件夹,则 config 模块的生成 JAR 文件将展平 props 的所有子文件夹(这是预期的行为),因此上面的代码将根本失败。
我的问题是:有没有办法告诉 Gradle 将这些文件复制到名为 props 的子文件夹而不是 JAR 的根目录?
我知道重构项目和移动文件夹很容易,但我们正处于从遗留构建和部署工具过渡的阶段,并且希望尽可能保持原始结构,直到我们可以完全切换到 Gradle .这是一个反复的过程,不可能一蹴而就。所以我需要一个临时解决方案。
【问题讨论】: