我的任务是为现有项目编写一些基类来进行自动化集成测试,而且我遇到了项目依赖性问题。
(抽象的)项目布局是:
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中的所有文件显示为项目资源的一部分,并按预期组装所有内容。
但是,当我真正去运行集成测试时,ConfigurationProject资源似乎不在类路径中,因为它无法提取配置信息,这进一步证实了此片段的输出中缺少ConfigurationProject: / p>
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使用IntegrationTestProjects gradle.build包含在IntegrationTestProject中
dependencies {
compile project(':ConfigurationProject')
}
我在将项目根添加为资源时只观察到了这个问题,项目的addng子文件夹似乎很好(并且在本项目的其他地方使用)。将配置文件移动到子文件夹是我考虑过的一个选项,并且如果我找不到其他解决方案,将会制定,但我想看看是否存在不涉及此操作过程的选项。
答案 0 :(得分:0)
对此的答案基本上是“不要让项目根目录成为资源文件夹”,Gradle讨厌这一点,即使它没有,但它仍然是糟糕的形式&#34;我通过将配置文件放在更合理的资源路径上来解决这个问题。