Gradle общая проблема версии зависимости - PullRequest
0 голосов
/ 27 июня 2019

У меня проблема с неверной версией зависимости, используемой сборкой Gradle.Я использую Gradle 4.6.

У меня есть библиотека, которую я разрабатываю, что дает Utils король возможностей.Давайте назовем это utils.jar.Я также разрабатываю другую библиотеку для связи с веб-сервисом.Давайте назовем это network.jar.Затем я разрабатываю проект, в котором мне нужны зависимости network.jar и зависимости utils.jar.Но мне нужна версия utils.jar, которая выше той, которая используется network.jar.

My project 
 |
 |-> network.jar:v1
 |       |
 |       |
 |       -> utils.jar:v1
 |
 -> utils.jar:v2

Вот build.gradle для сетевой библиотеки

dependencies {   
    compile "com.mycompany:utils:1"
}

Вотbuild.gradle для моего проекта

dependencies {   
    compile "com.mycompany:network:1" // pull utils.jar:1
    compile "com.mycompany:utils:2" // I need utils.jar:2 in my project
}

С этим в моем проекте, когда я пытаюсь использовать v2 из utils.jar, новый метод, представленный в v2, недоступен.В IntelliJ я вижу utils.jar v2 в classpath, но когда я пытаюсь использовать, например, класс com.mycompany.utils.CollectionUtils, он использует код utils, встроенный в библиотеку network.jar (v1) вместо использования кодаutils v2.

Поэтому я попытался явно удалить utils.jar (v1) из network.jar, пока эта зависимость импортируется в мой проект.build.gradle в моем проекте:

dependencies {   
    compile("com.mycompany:network:1") {
        exclude group: 'com.mycompany', module: 'utils' 
    }
    compile "com.mycompany:utils:2"
}

Но код utils v1 по-прежнему встроен в код network.jar, и именно этот используется вместо v2.

Как можноЯ заставляю Gradle понять, что я хочу использовать utils v2, а не utils v1, которые тянут network.jar?

1 Ответ

0 голосов
/ 27 июня 2019

Я нашел ошибку. Я создавал и публиковал на Maven репо с network.jar lib в виде толстой фляги. Следовательно, код utils.jar всегда был встроен в код network.jar.

Если люди совершают ту же ошибку, я выкладываю решение.

Я удалил это из файла network.jar build.gradle:

jar {
    // Remove that to not build a fat-jar in this case
    // from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 

    manifest {
        attributes 'Implementation-Title': 'Utils',
            'Implementation-Version': version,
            'Created-By': 'Myself'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...