У меня есть многомодульный проект Gradle. Один модуль (A) содержит классы, связанные с базой данных;другой (B) содержит приложения Spark и зависит от A.
Spark зависит от Guava 14.x. Мои классы базы данных зависят от Guava 28.x.
Мне нужно иметь возможность использовать Guava 28.x в моем модуле базы данных и объявить этот модуль как зависимость проекта в модуле Spark.
Затенение (и перемещение) Guava в модуле A достаточно просто:
shadowJar {
configurations = [project.configurations.shadow] // this was done to prevent ALL of A's dependencies from being shaded
relocate 'com.google.common', 'shaded.com.google.common'
}
dependencies {
shadow 'com.google.guava:guava:28.1-jre'
}
Но когда я объявляю модуль A зависимостью в B, например:
dependencies {
implementation project(':A')
}
JARruntimeClasspath
, который заканчивается на B, является не заштрихованным JAR для A.
Когда я указываю заштрихованный JAR, такой как:
dependencies {
implementation project( path: ':A', configuration: 'shadow' )
}
Ни один из переходных AЗависимости доступны на B runtimeClasspath
.
Моя цель - затенять и перемещать только Гуаву в модуле A, чтобы минимизировать размер JAR и время сборки. Затем мне нужен этот заштрихованный JAR, а также транзитивные зависимости A, доступные на B runtimeClasspath
.