Ответ 1
После нескольких пробных ошибок я смог расширить Gradle для разрешения зависимостей со следующим синтаксисом:
dependencies {
compile "org:module_name:12" {
artifact {
name "foo.*-bar"
type "zip"
}
}
}
Для этого потребуется прослушиватель оценки проекта, который будет обрабатывать зависимости. Решите дескриптор плюща для каждой зависимости, проанализируйте его, сопоставьте имена артефактов, обновите дескрипторы артефактов зависимостей (удалите один с шаблоном по имени и вставьте сопоставленные артефакты с именами).
Плюсы:
- Правильно использует кеш артефактов Gradle.
- Предотвращает передачу экспонатов (не соответствующих) артефактов.
- Применяется механика разрешения зависимостей.
Ловушки, найденные во время реализации:
-
Скопируйте конфигурацию, прежде чем разрешать дескрипторы плюща. Разрешенная конфигурация (с зависимостями) считается неизменной и не будет разрешена снова, поэтому сопоставленные артефакты не будут загружены
-
Соответствие разных объектов. После того, как дескриптор Ivy "разрешен" и загружен, несколько сложнее сопоставить его с нерешенной зависимостью (для обновления дескрипторов артефактов), поскольку разрешенный объект имеет другой тип. Пока что сопоставление координат "group-artifact-version" работает, но это хрупкое решение.
Образец кода для процессора зависимостей можно найти в GitHub (disclamer: предоставляется "как есть", никаких гарантов и обязанностей. Но если это удаляет вашу рабочую копию проекта, пожалуйста, дайте мне знать)