Мне было поручено написать некоторые базовые классы для автоматических тестов интеграции для существующего проекта, и я столкнулся с проблемой с зависимостями проекта.Ресурсы проекта Gradle не добавлены в Classpath
The (отведенной) макет проекта заключается в следующем:
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
}
Это, кажется, все в порядке, так как затмение показывает все файлы в корневом каталоге как часть ресурсов проекта, и сборка пакетов все, как ожидалось.
Однако, когда я действительно хожу для запуска интеграционных тестов, ресурсы 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 входит в IntegrationTestProject с использованием IntegrationTestProjects gradle.build
dependencies {
compile project(':ConfigurationProject')
}
Я только наблюдал эту проблему при добавлении корня проекта в качестве ресурса, ADDN g вложенных папок проекта в sourceSets кажется прекрасным (и используется в другом месте в этом проекте). Перемещение файлов конфигурации во вложенную папку - это вариант, который я рассмотрел, и будет действовать, если не найду другого решения, но я хотел посмотреть, есть ли варианты, которые не включали этот курс действий.
Корень проекта не следует добавлять в папку ресурсов. Лично я придерживаюсь стандарта src/main/resources –