Java >> Java-zelfstudie >  >> Java

Gradle-eigenschappen:voorbeeld van build en configuratie

In deze gedetailleerde zelfstudie van Gradle Properties zullen we zien hoe u toegang krijgt tot verschillende standaardeigenschappen in Gradle en hoe u onze aangepaste eigenschappen kunt instellen. Ook, welke methoden zijn om deze eigenschappen in te stellen en hoe Gradle ze verwerkt.

1. Waarom zouden we Gradle Properties gebruiken?

Als ontwikkelaars bieden we hoogwaardige code die schaalbaar en gemakkelijk te lezen is; Dankzij de eigenschappen van Gradle kunnen we deze taken uitvoeren en in sommige gevallen de compilatie en uitvoering ervan optimaliseren.

2. Wat hebben we nodig?

Zoals beschreven in het vorige voorbeeld (Gradle Hello World Tutorial), hebben we Gradle volledig functioneel nodig. Bekijk het gedeelte van de installatie en ga dan verder met dit voorbeeld.

3. Soorten eigenschappen van Gradle

In Gradle zijn er twee soorten eigenschappen, System properties en Project properties . De eerste zijn eigenschappen die worden gebruikt om de JVM te configureren die de uitvoering van de builds ondersteunt, en het tweede type is voor het parametriseren van variabelen in onze projecten, zoals namen, paden en andere nuttige benaderingen.

3.1 Systeemeigenschappen

We kunnen deze eigenschappen instellen via omgevingsvariabelen, waarbij we de GRADLE_OPTS- of JAVA_OPTS-waarden instellen om te beheren, bijvoorbeeld de Java home, Heap en PermGem Spaces of Gradle daemon-activering.

Ga dan naar de omgevingsvariabelen in Windows-gebruikers en stel de GRADLE_OPTS . in variabele met de waarde -Dorg.gradle.daemon=true .

Configuratie van Gradle-systeemeigenschappen

Met deze eigenschap activeren we een Gradle-daemon die alle bibliotheken en essentiële klassen voor de build laadt, en wanneer we Gralde uitvoeren, wordt alleen de build uitgevoerd, omdat de JVM en alle andere vereiste bibliotheken al draaien, wat een krachtige verbetering tot stand brengt.

Bekijk hoe dit de bouwtijd beïnvloedt.

Zonder demon.

Gradle Build geen Daemon

Daemon geactiveerd.

Gradle Build Daemon AAN

Door systeemeigenschappen in te stellen, kunnen we algemene eigenschappen voor alle projecten beheren en hoe we de prestaties kunnen verbeteren met JVM-geheugenbeheer en de daemon van gradle.

Bovendien kunnen we deze eigenschappen in de console instellen met de -D Java-opdrachtoptie. Kijk hoe je dat doet.

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle helloWorld -Dorg.gradle.daemon=false
:helloWorld
Welcome to JCG Gradle Tutorial

BUILD SUCCESSFUL

Total time: 1.873 secs

Er zijn enkele andere systeemeigenschappen:

  • org.gradle.java.home , Specificeert de Java Home voor het Gradle-bouwproces.
  • org.gradle.jvmargs , Beheer de geheugeninstellingen voor de JVM
  • org.gradle.configureondemand , Maakt een nieuwe incubatie- en bouwmodus mogelijk, dat is een geavanceerde functie wanneer we met meerdere projecten werken, wat resulteert in snellere builds.
  • org.gradle.parallel , Schakelt de parallelle modus in voor de incubatiemodus.

3.2 Projecteigenschappen

3.2.1 Gradle's eigenschappen, hallo!

Gradle biedt een brede lijst met standaardeigenschappen voor de huidige build, we kunnen ze allemaal afdrukken met deze eenvoudige opdracht in de console:gradle properties . Dit is gelijk aan de eigenschappen in het Gradle "Hello World"-voorbeeld.

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle properties
:properties

------------------------------------------------------------
Root project
------------------------------------------------------------

allprojects: [root project 'Gradle Properties Tutorial']
ant: org.gradle.api.internal.project.DefaultAntBuilder@33666fbb
antBuilderFactory: org.gradle.api.internal.project.DefaultAntBuilderFactory@7e10
cc38
artifacts: org.gradle.api.internal.artifacts.dsl.DefaultArtifactHandler_Decorate
d@4065a018
asDynamicObject: org.gradle.api.internal.ExtensibleDynamicObject@7ff37476
baseClassLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderS
cope@68a2866d
beforHelloWorld: task ':beforHelloWorld'
buildDir: E:\JavaCodeGeeks JCG\Gradle Properties Tutorial\build
buildFile: E:\JavaCodeGeeks JCG\Gradle Properties Tutorial\build.gradle
buildScriptSource: org.gradle.groovy.scripts.UriScriptSource@608a1b4e
buildscript: org.gradle.api.internal.initialization.DefaultScriptHandler@65037d6
3
childProjects: {}
class: class org.gradle.api.internal.project.DefaultProject_Decorated
classLoaderScope: org.gradle.api.internal.initialization.DefaultClassLoaderScope
@5ba0df26
components: []
configurationActions: org.gradle.configuration.project.DefaultProjectConfigurati
onActionContainer@57628c1c
configurations: []
convention: org.gradle.api.internal.plugins.DefaultConvention@18740ad1
defaultTasks: [beforHelloWorld]
dependencies: org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependen
cyHandler_Decorated@3f5aa04b
depth: 0
description: null
ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@2b90cc9
extensions: org.gradle.api.internal.plugins.DefaultConvention@18740ad1
fileOperations: org.gradle.api.internal.file.DefaultFileOperations@5a6bc081
fileResolver: org.gradle.api.internal.file.BaseDirFileResolver@3e3155a8
gradle: build 'Gradle Properties Tutorial'
group:
helloWorld: task ':helloWorld'
inheritedScope: org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamic
Object@247eb222
logger: org.gradle.api.logging.Logging$LoggerImpl@767c9c02
logging: org.gradle.logging.internal.DefaultLoggingManager@6aed5294
modelRegistry: org.gradle.model.internal.registry.DefaultModelRegistry@49d7572c
module: org.gradle.api.internal.artifacts.ProjectBackedModule@556edb6b
name: Gradle Properties Tutorial
parent: null
parentIdentifier: null
path: :
pluginManager: org.gradle.api.internal.plugins.DefaultPluginManager_Decorated@26
1bf0a0
plugins: [org.gradle.api.plugins.HelpTasksPlugin@751f265a]
processOperations: org.gradle.api.internal.file.DefaultFileOperations@5a6bc081
project: root project 'Gradle Properties Tutorial'
projectDir: E:\JavaCodeGeeks JCG\Gradle Properties Tutorial
projectEvaluationBroadcaster: ProjectEvaluationListener broadcast
projectEvaluator: org.gradle.configuration.project.LifecycleProjectEvaluator@703
91e42
projectRegistry: org.gradle.api.internal.project.DefaultProjectRegistry@600e7a58

properties: {...}
repositories: []
resources: org.gradle.api.internal.resources.DefaultResourceHandler@3e4eede1
rootDir: E:\JavaCodeGeeks JCG\Gradle Properties Tutorial
rootProject: root project 'Gradle Properties Tutorial'
scriptHandlerFactory: org.gradle.api.internal.initialization.DefaultScriptHandle
rFactory@6867946a
scriptPluginFactory: org.gradle.configuration.DefaultScriptPluginFactory@579ab80
1
serviceRegistryFactory: org.gradle.internal.service.scopes.ProjectScopeServices$
5@40f76015
services: ProjectScopeServices
standardOutputCapture: org.gradle.logging.internal.DefaultLoggingManager@6aed529
4
state: project state 'EXECUTED'
status: release
subprojects: []
tasks: [task ':beforHelloWorld', task ':helloWorld', task ':properties']
version: unspecified

BUILD SUCCESSFUL

Total time: 0.958 secs

Dit zijn veel eigenschappen, we willen alleen weten hoe we de standaard projecteigenschappen moeten lezen.

3.2.2 Aangepaste projecteigenschappen in script

Als we onze aangepaste eigenschappen willen toevoegen, moeten we ze definiëren in een buildscript met de ext{} blok.

ext{
	myFirstProperty = 'myCustomPropertyValue'
}

task showPropertiesTask << {
	println myFirstProperty
}

Nadat we het buildbestand hebben uitgevoerd, krijgen we deze uitvoer:

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle sPT
:showPropertiesTask
myCustomPropertyValue

BUILD SUCCESSFUL

Total time: 1.344 secs

3.2.3 Eigenschappen instellen in de opdrachtregel

In plaats van de eigenschappen in een buildscript in te stellen (dat is geen goede gewoonte, de beste aanpak is een eigenschappenbestand), kunnen we de -P-opdrachtregeloptie gebruiken om een ​​aangepaste eigenschap toe te voegen.

Vervolgens heeft het buildscript een taak die de waarde van twee eigenschappen afdrukt.

task showPropertiesTask << {
	println "Version: $version"
	println "Custom property: $customProperty"
}

Het script uitvoeren met dit commando gradle -Pversion=2.3.3 -PcustomProperty=myCustomValue showPropertiesTask , krijgen we de volgende uitvoer.

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle -Pversion=2.3.3 -PcustomProperty=myCustomValue showPropertiesTask
:showPropertiesTask
Version: 2.3.3
Custom property: myCustomValue

BUILD SUCCESSFUL

Total time: 2.67 secs

3.2.4 Eigenschappen instellen met een extern bestand

We kijken dus naar de optimale manier om onze projecteigenschappen in te stellen, via een extern bestand. Het bestand moet de naam gradle.properties hebben en het moet een tekstbestand zonder opmaak zijn met de naam van de eigenschap en de waarde ervan in dezelfde regel.

We maken nu een gradle.properties-bestand in dezelfde map van ons build.gradle-bestand, met de volgende inhoud:

gradle.properties

version = 3.0
customProperty = This value is obtained from gradle.properties

We gebruiken ons vorige build-script om de eigenschappen te tonen, na het uitvoeren van het gradle-script krijgen we de volgende output:

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle showPropertiesTask
:showPropertiesTask
Version: 3.0
Custom property: This value is obtained from gradle.properties

BUILD SUCCESSFUL

Total time: 0.943 secs

Een handig concept is de hoofdmap van Gradle. Als we de gradle.properties daar plaatsen, hebben deze eigenschappen voorrang op die in het project. In Windows is deze map $USER_HOME/.gradle .

Gradle User Home-eigenschappen

gradle.properties

version = 4.0
customProperty = This value is obtained from gradle.properties in user home

Vervolgens voegen we nog een gradle.properties-bestand toe aan deze map en voeren we de gradle-build uit, we krijgen de volgende uitvoer.

E:\JavaCodeGeeks JCG\Gradle Properties Tutorial>gradle showPropertiesTask
:showPropertiesTask
Version: 4.0
Custom property: This value is obtained from gradle.properties in user home

BUILD SUCCESSFUL

Total time: 1.45 secs

4. Belangrijkste punten

Dus, hier zijn enkele tips om op te letten:

  • We kunnen 2 soorten eigenschappen instellen, voor het afstemmen van geheugenbeheer en voor het aanpassen van onze projecten.
  • We kunnen beide eigenschappen in de opdrachtregel doorgeven met de opties -D en -P.
  • Een eigenschap die is gedefinieerd in het eigenschappenbestand in de hoofdmap van de Gradle-gebruiker heeft voorrang op de eigenschapswaarden die zijn gedefinieerd in een eigenschappenbestand in de projectmap.
  • We kunnen onze gradle-eigenschappen instellen in de Gradle-thuisgebruikersdirectory of in een projectdirectory.
  • De eerste directory waar gradle-zoekopdrachten voor eigenschappen $USER_HOME/.gradle zijn
  • Door de Gradle-daemon in te stellen, krijgen we betere prestaties in het bouwproces.

5. Download de Gradle-scripts


Java-tag