Gradle: затенение гуавы без потери транзитивных зависимостей - PullRequest
0 голосов
/ 21 октября 2019

У меня есть многомодульный проект 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.

1 Ответ

0 голосов
/ 21 октября 2019

Несколько неудовлетворительное решение - просто объявить в B необходимые мне переходные зависимости от A. Поскольку набор зависимостей относительно невелик, это может быть лучшим подходом для этого проекта;но я бы предпочел что-то более элегантное.

Может быть, моя зависимость от транзитивности чревата? Мне понравилось, потому что он сохраняет краткость dependencies во всех модулях этого проекта, но это может быть больше проблем, чем стоит.

...