Изменить номер версии зависимости в многопроектной сборке Gradle

У меня есть многомодульный проект Gradle, который содержит core и client. client зависит от core, который объявляется следующим образом:

dependencies {
    compile project(':core')
}

Если я публикую core и client в Ivy или Maven, зависимость от client до core использует точную версию, которая в настоящее время определена для core (например, 1.0.0).

Есть ли способ изменить это? Допустим, core гарантированно совместим между второстепенными выпусками. Поэтому вместо 1.0.0 я бы хотел, чтобы зависимость была от версии 1.+.


person Werzi2001    schedule 18.11.2017    source источник
comment
docs.gradle.org/current/userguide/   -  person JB Nizet    schedule 18.11.2017
comment
Тогда не стесняйтесь изложить свое решение в ответе.   -  person JB Nizet    schedule 19.11.2017
comment
Интересно, почему вы хотите это сделать, поскольку они тесно связаны между несколькими модулями.   -  person chenrui    schedule 21.11.2017
comment
@chenrui Как я уже сказал, модули гарантированно совместимы между основными версиями. Таким образом, вам не нужно обновлять клиент, чтобы использовать более новую версию ядра (в пределах одного мажора). С фиксированными номерами версий это было бы невозможно. Кроме того, пример core и client — это всего лишь пример. В реальном проекте модулей гораздо больше.   -  person Werzi2001    schedule 04.12.2017


Ответы (1)


Чтобы заменить версию в сгенерированном pom.xml, я создал вспомогательную функцию:

// helper function to replace dependency version in maven pom.xml
def replaceDependencyVersion(root, groupId, artifactId, version) {
    // replace version
    root.dependencies.dependency.findAll() { node ->
        node.groupId.text() == groupId && node.artifactId.text() == artifactId
    }.each() { node ->
        node.version*.value = version
    }
}

Затем эту функцию можно использовать при публикации для замены номера версии:

// publishing
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java

            pom.withXml {
                replaceDependencyVersion(asNode(), 'com.test', 'core', '1.+')
            }
        }
    }
}
person Werzi2001    schedule 04.12.2017