У меня была неплохая конфигурация gradle, которая построила все просто отлично. Но один из проектов моей многопроектной сборки был получен из остального из них настолько, что я с радостью переместил бы его в другой репозиторий git и настроил бы подмодули для его обработки.
Во-первых, я переместил Project и его ресурсы в подпапку Libraries/MovedProject
. После изменения некоторых строк в конфигурациях gradle он работал нормально. Но потом я решил написать новый build.gradle только для этого проекта и переместить все конфигурации там из основного.
И тут все перестало работать. Когда я пытаюсь вызвать любую задачу, она всегда заканчивается
с Could not find property 'sourceSets' on project ':Libraries/MovedProject'
. Линия, которая отвечает за это:
dependencies {
...
if (noEclipseTask) {
testCompile project(':Libraries/MovedLibrary').sourceSets.test.output
}
}
который я использую для запуска тестов, в которых я использую классы из других проектов. Если я удалю эту строку, сборка завершится неудачей, только когда она достигнет задачи compileTestJava проектов, которые используют MovedProject. Если я удалю эту строку и вызову gradle :Libraries/MovedLibrary:properties
, я увижу:
...
sourceCompatibility: 1.7
sourceSets: [source set main, source set test]
standardOutputCapture: [email protected]
...
в то время как gradle :Libraries/MovedLibrary:build
строит правильно.
В настоящее время у меня все настроено так:
-
каталоги:
- /SomeMainProject1
- /SomeMainProject2
- /SomeMainProject3
- /Библиотеки
- /MovedProject
- build.gradle
- dependencies.gradle
- project.gradle
- tasks.gradle
- /MovedProject
- /Builder
- dependencies.gradle
- project.gradle
- tasks.gradle
- build.gradle
- settings.gradle
-
settings.gradle
include Libraries/MovedProject, SomeMainProject1, SomeMainProject2, SomeMainProject3
-
sourceSets для MovedProject определены в
Libraries/MovedProject/project.gradle
:sourceSets { main { java { srcDir 'src' srcDir 'resources' } resources { srcDir 'resources' } } test { java { srcDir 'test/unit' } } }
-
зависимости, которые используют sourceSets.test.output, хранятся в
Builder/dependancies.gradle
и устанавливаются для каждого проекта, который требует MovedProject для запуска тестов:project(':SomeMainProject1') { dependencies { ... if (noEclipseTask) { testCompile project(':Libraries/net.jsdpu').sourceSets.test.output } } }
Каким будет самый простой способ избавиться от этой ошибки и сделать проекты gradle с текущей структурой каталогов? Я хотел бы понять, почему gradle не может видеть это свойство.