Как определить переменную для версии зависимостей в Gradle

в настоящее время я пытаюсь перенести до Gradle

в своем Maven версия у меня есть версии зависимостей, перечисленные в моем родитель пом:

<properties>
    <spring.version>4.2.3.RELEASE</spring.version>
    <spring.boot.version>1.3.3.RELEASE</spring.boot.version>
    ...
</properties>

и тогда я могу определить такую зависимость в любом из моих подмодулей:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

Я пытаюсь сделать то же самое на Gradle, потому что некоторые из моих модулей используют такие версии зависимостей, и я бы не хотел изменять более одного места если я хочу обновить Spring или выполнить аналогичную операцию.

ближе всего я добрался до этого:

dependencies {
    ext.springVersion = '4.2.3.RELEASE'
    compile "org.springframework:spring-jdbc:$springVersion"
}

но это все еще не работает. Каков рекомендуемый способ достижения этого в Gradle? Или Gradle в этому относиться по-другому? Возможно, мой ум все еще слишком занят Maven, чтобы увидеть другое решение.

пожалуйста, имейте в виду, что эта попытка на Gradle не ровно чего я еще хочу. Я хотел бы иметь возможность определять зависимости в отдельные файл, а не непосредственно в файле, который будет его использовать.

3 ответов


способ, которым вы предоставили версию зависимости, является правильным и должен работать. IntelliJ Idea имеет некоторые проблемы с переменными в скриптах сборки gradle, поэтому вам не нужно полагаться на него, просто попробуйте запустить свою сборку и проверить, загружена ли зависимость, и ваш проект построен правильно.

если вы хотите сохранить свои зависимости проекта в отдельном файле, то наиболее распространенным подходом является их определение в корневой сборке.скрипт, через subprojects закрытие для всех подпроекты или через allprojects если вы хотите указать зависимость для всех ваших проектов, включите корень. Это будет выглядеть так:

subprojects{
    dependencies{
        compile ...
    }
}

таким образом, вы можете предоставить любую общую конфигурацию для подпроектов в корневом скрипте сборки. Читайте об этом руководство пользователя

или вы можете объявить переменную в корневом скрипте сборки, инициализировать ее как карту со всеми необходимыми спецификациями зависимостей или как массив с одним списком зависимостей и использовать эта переменная в ваших подпроектах, если они вам нужны. Что-то вроде этого в корне:

ext.commomLibs = [
  'testlibs' : 'junit:junit:4.8'
]

Примечание, Вы можете определить значение карты как массив спецификации lib, чтобы сделать его указывающим на все эти зависимости. И тогда вы можете использовать его в своих подпроектах как:

dependencies{
    testCompile commomLibs.testlibs
}

еще одна альтернатива-использовать отдельный скрипт сборки с зависимостями и применить его к нужному скрипту сборки, например

apply from: 'dependencies.script'

затем вы можете разместить свой dependencies в dependencies script и просто применяйте его в любом другом скрипте сборки, где вам нужны эти зависимости и / или может быть какая-то общая логика.


ниже конфигурации в работала с gradle version 4.5, разместив его здесь для дальнейшего использования -

ext {
    springVersion = '5.0.3.RELEASE'
}

dependencies {
    compile  "org.springframework:spring-context:$springVersion"
}

использовать Двойные Кавычки это сработало для меня.

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
        hazelCastVersion = '3.10.4'
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }
}

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-config')
    compile "com.hazelcast:hazelcast-spring:${hazelCastVersion}"
    compile group: 'com.hazelcast', name: 'hazelcast', version: "${hazelCastVersion}" }