Свойства являются ценным инструментом для простой настройки сборок Gradle и среды Gradle . В этом посте я продемонстрирую некоторые из этих подходов для определения свойств, используемых в сборке Gradle .
Gradle поддерживает как свойства проекта, так и системные свойства . Основное различие между ними, которое представляет интерес в этом посте, заключается в том, как к ним осуществляется доступ. Свойства проекта более удобны для прямого доступа по имени, а системные свойства доступны через обычные методы доступа к системным свойствам Java / Groovy.
Передача свойств проекта из командной строки с -P
Один из самых простых подходов для передачи свойств в сборку Gradle — указать свойства проекта с помощью -P из командной строки. Свойства, переданные в сборку с помощью -P , легко доступны в сборке как свойства проекта и, если позволяет их структура имен, могут быть доступны напрямую как переменные.
Передача системных свойств из командной строки с -D
Как и в случае с другими приложениями Java, системные свойства можно передать в сборки Gradle с помощью -D . Хотя эти системные свойства, предоставляемые сборке Gradle через параметр -D , всегда доступны сборке Gradle через обычный механизм Java для получения системных свойств , Gradle позволяет указывать свойства проекта в качестве системных свойств. Это делается путем размещения префикса org.gradle.project. перед названием свойства, желаемого в сборке. Например, если кто-то хочет указать системное свойство с именем name.first с -D , которое будет доступно для сборки Gradle, как если бы оно было предоставлено с -P , человек может предоставить его для сборки Gradle в командной строке как org.gradle.project. name.first org.gradle.project. name.first и сборка Gradle увидит его как свойство проекта с именем name.first .
Передача свойств системы через переменную среды
Любое приложение на Java или Groovy (включая сборку Gradle) может обращаться к переменным среды через System.getenv (String) . Тем не менее, Gradle позволяет получить доступ к переменным среды внутри сборки, как и к другим свойствам проекта, если переменная среды имеет префикс ORG_GRADLE_PROJECT_ . Например, если кто-то хотел, чтобы свойство проекта в сборке Gradle называлось name.last и хотел предоставить его для сборки через переменную среды, этот человек мог бы объявить переменную среды ORG_GRADLE_PROJECT_name.last и ее значение было бы доступно для Gradle построить как свойство проекта с именем name.last .
gradle.properties
Свойства также могут быть предоставлены для сборки Gradle через файл свойств с именем gradle.properties . Любые свойства, указанные в systemProp. в начале названия их свойств рассматриваются как системные свойства в сборке Gradle, а другие свойства (без их имен, начинающихся с «systemProp.») рассматриваются как свойства проекта Gradle. Например, если у моего файла gradle.properties есть свойство name.last=Marx и свойство systemPropr.name.first=Dustin , свойство name.last будет видно и доступно в сборке Gradle, как и любое свойство проекта во время его name.first свойство будет видно и доступно в сборке Gradle, как и любое системное свойство.
Демонстрация / Пример
Каждый из этих типов механизмов определения свойств может быть продемонстрирован на простом примере. Следующая сборка Gradle пытается распечатать различные свойства, которые указываются по-разному.
наращивание properties.gradle
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
task displayProperties << { displaySystemProperties() displayGradleProjectProperties()}def displaySystemProperties(){ println "\n=== System Properties ===" println "Favorite Movie (1994): ${System.properties['movie.favorite.1994']}" println "Favorite Movie (1996): ${System.properties['movie.favorite.1996']}" println "Favorite Movie (1997): ${System.properties['movie.favorite.1997']}" println "Favorite Movie (1981): ${System.properties['movie.favorite.1981']}" println "Favorite Movie (2012): ${System.properties['movie.favorite.2012']}" println "Favorite Movie (2013): ${System.properties['movie.favorite.2013']}"}def displayGradleProjectProperties(){ println "\n=== Gradle Project Properties ===" println "Favorite Movie (1994): ${getProjectProperty('movie.favorite.1994')}" println "Favorite Movie (1996): ${getProjectProperty('movie.favorite.1996')}" println "Favorite Movie (1997): ${getProjectProperty('movie.favorite.1997')}" println "Favorite Movie (1981): ${getProjectProperty('movie.favorite.1981')}" println "Favorite Movie (2012): ${getProjectProperty('movie.favorite.2012')}" println "Favorite Movie (2013): ${getProjectProperty('movie.favorite.2013')}"}def String getProjectProperty(String propertyName){ String movieTitle = "null" if (hasProperty(propertyName)) { movieTitle = this.properties[propertyName] } return movieTitle} |
Некоторые свойства, которые будут переданы этому сценарию, будут предоставлены в командной строке с -P , некоторые будут предоставлены в командной строке с -D , одно будет предоставлено через переменную окружения, а два будут предоставлены через gradle.properties Файл gradle.properties в том же каталоге, что и сборка. Этот файл gradle.properties показан далее.
gradle.properties
|
1
2
|
movie.favorite.2013=Star Trek into DarknesssystemProp.movie.favorite.2012=Skyfall |
При gradle.properties файла gradle.properties две другие интересные части примера — это установка переменной среды. Пример здесь приведен в DOS, но то же самое можно сделать с немного другим синтаксисом в средах Linux. Команда DOS / Windows: set ORG_GRADLE_PROJECT.movie.favorite.1981="Raiders of the Lost Ark"
Для этой демонстрации я буду запускать скрипт сборки Gradle с параметрами -D и -P : gradle -b build-properties.gradle displayProperties -Pmovie.favorite.1996="Independence Day" -Dmovie.favorite.1997=Gattaca -Dorg.gradle.project.movie.favorite.1994="Shawshank Redemption"
При запуске вышеперечисленного скрипта сборки Gradle с указанным файлом gradle.properties , с указанной указанной переменной среды и с только что показанной командой выходные данные выглядят так, как показано на следующем снимке экрана.
Снимок экрана показывает, как свойства отображаются / доступны в сборке Gradle в зависимости от их источника и соглашения об именах. Вкратце, выходные данные демонстрируют следующие «правила» доступности свойств в сборке Gradle:
- Свойства командной строки
-Pявляются «свойствами проекта» - Свойства командной строки
-D— это, за одним исключением, «системные свойства» - Свойства командной строки
-Dкоторые начинаются сorg.gradle.project.являются «свойствами проекта» - Свойства, указанные в
gradle.properties, за одним исключением, являются «свойствами проекта» - Свойства, указанные в
gradle.properties, начинающиеся сsystemProp.являются «системными свойствами» - Свойства, указанные в переменной среды, являются, за одним исключением, «системными свойствами»
- Свойства, указанные в переменных среды, начинающихся с
ORG_GRADLE_PROJECT_являются «свойствами проекта»
Вывод
Gradle предоставляет множество подходов для указания свойств, которые можно использовать для настройки сборки Gradle.
