Как бы я добавил один набор источников для нескольких подпроектов?
Прежде всего ... да, я знаю, насколько это смешно. Это просто то, что я должен сделать.
Настройка
- В проекте используется Groovy DSL.
- Есть 3 подпроекта (A, B, C)каждый из которых имеет свой уникальный набор основных источников.
- Существует 5 дополнительных наборов источников (1, 2, 3, 4, 5), внешних по отношению к этим проектам.
- Одно из внешних наборов источников может бытьскомпилирован один.
- Все исходные наборы зависят от интерфейса, который определен 3 разных раза в каждом подпроекте.
- Основной источник подпроекта не может зависеть ни от одного из внешних источников
- 1 и 2 должны быть скомпилированы с A, B и C.
- 3 должны быть скомпилированы с A, а также B.
- 4 должна быть скомпилирована с B, а также C
- 5 должен быть скомпилирован только с C.
- 4 и 5 должны зависеть от класса, определенного в 2.
- 5 должен быть автономным источником, чтобы он мог бытьвключается в качестве исходного набора внутри любых будущих подпроектов, которые могут быть добавлены.
- Ни один из внешних, такМожно разрешить включать источники из любого другого набора источников
- Ни один из внешних источников не может быть скомпилирован отдельно.
- Ни один из внешних источников не может быть включен как зависимость jar или проекта;они ДОЛЖНЫ быть включены в качестве исходного набора и ДОЛЖНЫ быть скомпилированы отдельно для каждого подпроекта, который включает их.
A
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/source_sets/1/src",
"$rootDir/source_sets/2/src",
"$rootDir/source_sets/3/src"
]
}
}
}
B
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/source_sets/1/src",
"$rootDir/source_sets/2/src",
"$rootDir/source_sets/3/src",
"$rootDir/source_sets/4/src"
]
}
}
}
C
sourceSets {
main {
java {
srcDirs = ["src",
"$rootDir/interfaces/source_sets/1/src",
"$rootDir/interfaces/source_sets/2/src",
"$rootDir/interfaces/source_sets/4/src",
"$rootDir/interfaces/source_sets/5/src"
]
}
}
}
settings.gradle
include(":interfaces/A")
project(":interfaces/A").name = "A"
include(":interfaces/A")
project(":interfaces/A").name = "A"
include(":interfaces/A")
project(":interfaces/A").name = "A"
Проблема в том, что 4 и 5 не могут найти класс в 2, и моя IDE (IntelliJ) не может найти правильный путь к классу.
На самом деле мне нужно, чтобы внешние источники работали так, как если бы их было 3 отдельных копии, при этом фактически не было 3 отдельных копий, и мне нужно сделать это без использованияиз символических / программных ссылок.
В решении нужно использовать только gradle, но он может использовать плагин JetBrains «idea» для gradle, если он не включает фиксацию каких-либо файлов в папке «.idea»,но он может включать встроенный XML или файлы в папке ресурсов вне папки .idea.
Так что да ... это слишком сложно и просто ... тьфу! Но так оно и есть.