0

我的任务是为现有项目的自动化集成测试编写一些基类,但我遇到了项目依赖项的障碍。

(抽象的)项目布局是这样的:

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 将根目录中的所有文件显示为项目资源的一部分,并按预期组装所有内容。

但是,当我实际运行集成测试时,ConfigurationProject 资源似乎不在类路径中,因为它无法提取配置信息,进一步证实了此代码段的输出中缺少 ConfigurationProject:

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')
}

我只在将项目根目录添加为资源时观察到这个问题,将项目的子文件夹添加到 sourceSets 似乎很好(并且在该项目的其他地方使用)。将配置文件移动到子文件夹是我考虑过的一个选项,如果我找不到其他解决方案,我会制定,但我想看看是否有不涉及此操作过程的选项。

4

1 回答 1

0

这个问题的答案本质上是“不要让项目根目录成为资源文件夹,Gradle 讨厌这样,即使没有,它也是一种糟糕的形式”我通过将配置文件放置到更合理的资源路径来解决这个问题。

于 2014-12-05T15:44:37.270 回答