Мой проект Gradle использует application
плагин для создания файла jar. Как часть транзитивных зависимостей времени выполнения, я в конечном итоге подключаюсь org.slf4j:slf4j-log4j12
. (Он упоминается как субтранзитивная зависимость по крайней мере в 5 или 6 других транзитивных зависимостях - этот проект использует spring и hadoop, поэтому все, кроме кухонной мойки, втягивается ... нет, подождите ... это тоже есть :) ).
Я хочу глобально исключить slf4j-log4j12
банку из созданной мной банки. Итак, я пробовал это:
configurations {
runtime.exclude group: "org.slf4j", name: "slf4j-log4j12"
}
Однако это, похоже, исключает все org.slf4j
артефакты, включая slf4j-api
. При работе в режиме отладки я вижу такие строки, как:
org.slf4j#slf4j-api is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-simple is excluded from com.pivotal.gfxd:gfxd-demo-mapreduce:1.0(runtime).
org.slf4j#slf4j-log4j12 is excluded from org.apache.hadoop:hadoop-common:2.2.0(runtime).
Я не хочу искать источник каждой slf4j-log4j12
транзитивной зависимости, а затем иметь отдельные compile foo { exclude slf4j... }
операторы в моем dependencies
блоке.
Обновить:
Я тоже пробовал это:
configurations {
runtime.exclude name: "slf4j-log4j12"
}
Что в конечном итоге исключает все из сборки! Как бы я ни уточнил group: "*"
.
Обновление 2:
Для этого я использую Gradle версии 1.10.
Ответы:
Ах, следующее работает и делает то, что я хочу:
Кажется, что правило исключения имеет только два атрибута -
group
иmodule
. Однако приведенный выше синтаксис не мешает вам указать любое произвольное свойство в качестве предиката. При попытке исключить из отдельной зависимости вы не можете указать произвольные свойства. Например, это не удается:с участием
Таким образом, даже если вы можете указать зависимость с помощью a
group:
иname:
не можете указать исключение с помощьюname:
!?!Возможно, отдельный вопрос, а что же тогда такое модуль ? Я могу понять понятие GroupId: artifactId: version в Maven, которое, как я понимаю, переводится как group: name: version в Gradle. Но тогда как мне узнать, к какому модулю (на языке Gradle) принадлежит конкретный артефакт Maven?
источник
configurations { runtime.exclude group: '*' }
.Для глобального исключения одной или нескольких библиотек добавьте в build.gradle следующее:
Теперь у блока exclude есть две группы свойств и модуль . Для тех из вас, кто работает с maven, группа такая же, как groupId, а модуль такой же, как artifactId . Пример: Чтобы исключить com.mchange: c3p0: 0.9.2.1, следует исключить блок
источник
Ваш подход правильный. (В зависимости от обстоятельств вы можете захотеть использовать
configurations.all { exclude ... }
.) Если эти исключения действительно исключают более одной зависимости (я никогда не замечал этого при их использовании), сообщите об ошибке на http://forums.gradle.org , в идеале с воспроизводимым примером.источник
configurations.all{}
это именно то, что я искал. Спасибо за сообщение Peterв примере ниже я исключаю
источник
Я использовал spring boot 1.5.10 и пытался исключить логбэк, данное решение выше не сработало, вместо этого я использую конфигурации
источник
В дополнение к тому, что заявил @ berguiga-mohamed-amine, я только что обнаружил, что подстановочный знак требует, чтобы аргумент модуля оставался пустой строкой:
источник