Как использовать только файловые зависимости в Gradle вместо указания groupId:artifactId:versionId

У меня есть следующая запись в моем файле Gradle

dependencies {
    compile 'org.A:A:1.0'
}

который загружает 'org.B:B:1.0', потому что это его зависимость.(явно не упоминается в gradle)

В моем проекте я хочу использовать A* и B*, которые представляют собой тени (измененное пространство имен) для A и B соответственно.

Теперь я определил зависимость для A* как

dependencies{
    compile file('libs/A*.jar')
}

Но этот по-прежнему скачивает "org.B: B: 1.0"

Как подключить Gradle к использованию файла ('libs / B*.jar')?

2 ответа

Решение

Первое решение, которое приходит на ум, состоит в том, чтобы исключить переходную зависимость compile 'org.A:A:1.0'

Это работает так:

dependencies {
    compile('org.A:A:1.0') {
        exclude 'org.B:B:1.0'
    }
}

Посмотрите Руководство пользователя Gradle для получения более подробной информации по этому вопросу.

Как упоминалось в комментариях, файловые зависимости не могут иметь транзитивных зависимостей. Так A*.jar либо имеет содержимое B.jar как-то вкатился в него, или у вас B.jar на пути сборки где-то еще.

Файловые зависимости обычно являются последним средством, они не участвуют в разрешении конфликтов; вам нужен репозиторий зависимостей, такой как maven или же ivy для этого.

Другие вопросы по тегам