Как определить переменную для версии зависимостей в Gradle
В настоящее время я пытаюсь перенести проект Maven
на Gradle
В моей версии Maven
у меня есть версии зависимостей, все перечисленные в моем родительском pom:
<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 не совсем то, что я хочу. Я хотел бы иметь возможность определять зависимости в отдельном файле, а не непосредственно в файле, который будет его использовать.
Ответы
Ответ 1
То, как вы предоставили версию зависимости, является правильным и должно работать. IntelliJ Idea имеет некоторые проблемы с переменными в сценариях сборки gradle, поэтому вам не нужно полагаться на нее, просто попробуйте запустить сборку и проверить, загружена ли зависимость, и ваш проект построен правильно.
Если вы хотите сохранить зависимости проекта в отдельном файле, то наиболее распространенным подходом является определение их в корневом файле build.script через закрытие subprojects
для всех подпроектов или через allprojects
, если вы хотите указать зависимость для всех ваших проектов включает корень. Это будет выглядеть так:
subprojects{
dependencies{
compile ...
}
}
Таким образом вы можете предоставить любую общую конфигурацию для подпроектов в корневой сборке script. Прочитайте об этом руководство пользователя
Или вы можете объявить переменную в корневой сборке script, инициализировать ее как карту со всеми необходимыми спецификациями зависимостей или как массив с одним списком зависимостей и использовать эту переменную в своих подпроектах, если они вам понадобятся. Что-то вроде этого в корне:
ext.commomLibs = [
'testlibs' : 'junit:junit:4.8'
]
Примечание. Вы можете определить значение карты как массив спецификации lib, чтобы указать на все эти зависимости. И затем вы можете использовать его в своих подпроектах как:
dependencies{
testCompile commomLibs.testlibs
}
Еще одна альтернатива - использовать отдельную сборку script с зависимостями и применить ее к buils script, который вам нужен, например
apply from: 'dependencies.script'
Затем вы можете поместить свои зависимости в зависимости script и просто применить его в любой другой сборке script, где вам нужны эти зависимости и/или может быть некоторой общей логикой.
Ответ 2
Ниже конфигурация в файле build.gradle
у меня работала с gradle version 4.5
, разместив ее здесь для дальнейшего использования -
ext {
springVersion = '5.0.3.RELEASE'
}
dependencies {
compile "org.springframework:spring-context:$springVersion"
}
Ответ 3
Используйте двойные кавычки, это работает для меня.
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}" }
Ответ 4
Добавляем к Викасу Сачдеву ответ:
Это не сработало для меня таким образом в моем подпроекте. Gradle выдает ошибку "Не удалось найти org.springframework: spring-context: $ springVersion". Наконец, я решил свою проблему, добавив знак плюс.
например:
root gradle.properties:
springVersion = '5.0.3.RELEASE'
root build.gradle
dependencies {
compile "org.springframework:spring-context:${springVersion}"
}
подпроект build.gradle
dependencies {
compile "org.springframework:spring-context:" + springVersion
}
Примечание: моя версия Gradle - 5.4.1.
или вы можете с помощью плагина управлять вашей зависимостью версии.
io.spring.dependency-менеджмент
Ссылки: https://docs.spring.io/dependency-management-plugin/docs/current/reference/html/
Ответ 5
У меня есть альтернативный синтаксис сахара. Я предполагаю, что это "длинный" способ написания зависимости.
мастер "gradle.build"
plugins {
id 'java'
}
ext {
slf4jApiVersion = '1.7.28'
junitVersion = '4.12'
}
субмодуль/проект gradle.build
dependencies {
testCompile group: 'junit', name: 'junit', version: "${junitVersion}"
compile group: 'org.slf4j', name: 'slf4j-api', version: "${slf4jApiVersion}"
}
обратите внимание на разделение группы, имени и версии... SINQLE заключает в кавычки значения группы и имени, а DOUBLE заключает в кавычки переменную версии-значения.
Ответ 6
Теперь вы можете использовать еще более близко к зависимостям в App Gradle Build, как показано ниже:
dependencies {
def daggerVersion = "2.24"
implementation "com.google.dagger:dagger:$daggerVersion"
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
}