Как определить переменную для версии зависимостей в 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}" }