Gradle с нестандартными именованными исходными наборами - как мне сделать их доступными для тестовых классов?
У меня есть (устаревший) Java-проект, который я переконфигурирую, чтобы построить с Gradle. Сборка должна, в конце концов, вывести ряд jar
архивы, поэтому я разделил, чтобы разделить источник на наборы источников, которые соответствуют подразделению вывода на архивы.
Дерево файлов выглядит примерно так:
- project root
- src
- setOne
- java
- ...
- resources
- ...
- setTwo
- java
- ...
- setThree
- java
- ...
- resources
- ...
- test
- java
- ...
- build.gradle
И в build.gradle
У меня есть следующее:
apply plugin: 'java'
sourceSets {
setOne
setTwo {
compileClasspath += setOne.output
}
setThree
test
}
dependencies {
setOne group: 'foo', name: 'bar', version: '1.0'
}
// Setup dependencies so that compileJava compiles all source sets
// while avoiding cyclic dependencies for main and test
sourceSets.matching { ss ->
!(ss.getName().contains('test') || ss.getName().contains('main'))
}.each { ss ->
compileJava.dependsOn ss.getCompileJavaTaskName()
}
Когда я пытаюсь построить это, я получаю кучу предупреждений от compileSetTwoJava
цель о некоторых классах не решаются - ссылаясь на классы из foobar
библиотека импортирована в setOne
, Я предполагаю, что это потому, что Gradle только дает setTwo
доступ к встроенным классам setOne
- но почему он не может разрешить зависимости для классов, импортируемых из setOne
в процессе?
Как мне правильно это настроить?
1 ответ
Оказывается, это было так же просто, как я и думал - если вы просто начнете правильный путь. Definining
setTwo {
classPath += setOne.runtimeClasspath // instead of setOne.output
}
решает проблему.
ОБНОВИТЬ:
Кажется, даже лучше сделать это среди зависимостей, где можно сделать
dependencies {
setTwo sourceSets.setOne.output
}
и заставить его работать.