我的任务是为现有项目的自动集成测试编写一些基类,但我遇到了项目依赖项的障碍。
(抽象的(项目布局是这样的:
project /
MainProject
Plugins /
...
ConfigurationProject
IntegrationTestProject
IntegrationTestProject 依赖于 ConfigurationProject,后者具有以下布局:
ConfigurationProject/
PluginConfigs/
<plugin configuration files>
<main configuration files>
值得注意的是,主配置文件位于项目的根目录中。 为了尝试将它们添加到我的类路径中,我的主 build.gradle 具有以下内容:
project('ConfigurationProject') {
description = 'Configuration'
sourceSets.main.resources.srcDir projectDir
}
这看起来不错,因为 eclipse 将 root 中的所有文件都显示为项目资源的一部分,并且组装所有文件都按预期打包。
但是,当我实际运行集成测试时,配置项目资源似乎不在类路径中,因为它无法提取配置信息,此代码段的输出中缺少配置项目进一步证实了这一点:
public void classpathScanner() {
ClassLoader c=getClass().getClassLoader();
System.out.println("c="+c);
URLClassLoader u=(URLClassLoader)c;
URL[] urls=u.getURLs();
for (URL i : urls) {
System.out.println("url: "+i);
}
}
ConfigurationProject 包含在 IntegrationTestProject 中使用 IntegrationTestProjects gradle.build
dependencies {
compile project(':ConfigurationProject')
}
我只在将项目根目录添加为资源时观察到这个问题,将项目的子文件夹添加到 sourceSet 似乎很好(并且在此项目的其他地方使用(。 将配置文件移动到子文件夹是我考虑过的一个选项,如果我找不到其他解决方案,就会实施,但我想看看是否有不涉及此操作过程的选项。
这个问题的答案本质上是"不要让项目根目录成为资源文件夹,Gradle 讨厌它,即使它没有,无论如何它都是糟糕的形式" 我通过将配置文件放置在更合理的资源路径来解决此问题。