Gradle: общая зависимость ресурсов для нескольких проектов Java
Я разрабатываю проект с несколькими модулями с помощью gradle/intellij-idea, и вот структура моего дома проекта:
project/
sub-project-1
/main/resources
sub-project-2
/main/resources
data
/main/resources
/test/resources
Как вы можете видеть, у меня есть несколько подпроектов (все java), как я могу заставить их зависеть от некоторых общих ресурсов (проект "данные", который не содержит кода, а только ресурсов), а также их собственные отдельные ресурсы?
Также лучше всего, чтобы intellij-идея могла автоматически подбирать эти зависимости с помощью JetGradle (JetGradle отлично справляется со стандартными зависимостями проекта gradle java в каждом подпроекте).
Спасибо большое!
Ответы
Ответ 1
Одно из решений состоит в том, чтобы применить плагин Java также к проекту data
, а затем использовать обычные зависимости проекта (например, dependencies { runtime project(":data") }
). Однако для предотвращения отправки тестовых ресурсов потребуется немного усилий.
Другое решение состоит не в том, чтобы сделать data
проектом Gradle, а в буквальном смысле включить его каталоги ресурсов в другие два проекта (sourceSets.main.resources.srcDir "../data/main/resources"; sourceSets.test.resources.srcDir "../data/test/resources"
).
Ответ 2
Подход, который я принял, заключался в использовании ссылки на проект
sourceSets {
main {
resources {
srcDirs += [
project(':data').sourceSets.main.resources
]
}
}
}
Ответ 3
Хорошо, я понял это. Это на самом деле довольно просто. Просто обработайте папку "data" в качестве другого проекта и добавьте объявления зависимостей в подпроекты, сделайте трюк. Например:
dependencies {
compile project (':data')
testCompile project (':data')
}
Ответ 4
Вам нужно выбрать проект, который будет содержать ваши ресурсы. Все остальные проекты, которым требуются эти ресурсы, добавят их в компонент resources
sourceSets.
sourceSets {
data {
resources {
srcDir "${project(':data').projectDir}/src/main/resources"
include "your_pattern_here**"
}
}
main {
resources {
srcDirs += [ data.resources ]
}
}
}
Ответ 5
А вот версия для Kotlin DSL - для синхронизации всех ресурсов от: модуля данных до корня и всех папок сборки/ресурсов подмодулей:
// Synchronizing resources from :data module to project root: build/resources
synchronizeSharedResources()
subprojects {
// Synchronizing resources from :data module to all submodules: build/resources
synchronizeSharedResources()
}
fun Project.synchronizeSharedResources() {
sourceSets {
main {
resources.srcDir(project(":data").sourceSets["main"].resources.srcDirs)
}
test {
resources.srcDir(project(":data").sourceSets["test"].resources.srcDirs)
}
}
}