Gradle
Introducció
Section titled “Introducció”Instal.la gradle amb {% link “/tool/scoop/” %}:
> scoop install gradle
Tens un projecte “demo” a https://gitlab.com/xtec/kotlin/gradle
Obre un terminal de {% link “/windows/powershell/” %}
Verifica que gradle
està instal.lat:
> gradle
Welcome to Gradle 8.10.1.
Directory 'C:\Users\david' does not contain a Gradle build.
Crea la carpeta gradle
i entra dins la carpeta
> md gradle> cd gradle
Executa gradle init
amb els paràmetres que es mostren a continuació per generar una aplicació Kotlin amb el nom gradle
:
gradle init --package gradle --project-name gradle --java-version 21 --type kotlin-application --dsl kotlin --test-framework kotlintest --no-split-project --no-incubating --overwrite
Pots veure que s’han creat diferents fitxers:
> ls
Directory: C:\Users\david\gradle
Mode LastWriteTime Length Name---- ------------- ------ ----d----- 4/10/2024 8:23 appd----- 4/10/2024 8:23 gradle-a---- 4/10/2024 8:23 290 .gitattributes-a---- 4/10/2024 8:23 108 .gitignore-a---- 4/10/2024 8:23 8762 gradlew-a---- 4/10/2024 8:23 2966 gradlew.bat-a---- 4/10/2024 8:23 535 settings.gradle.kts
Gradle Wrapper
Section titled “Gradle Wrapper”Al crear el projecte s’ha creat la carpeta gradle:
> ls .\gradle\wrapper\
Directory: C:\Users\david\gradle\gradle\wrapper
Mode LastWriteTime Length Name---- ------------- ------ -----a---- 4/10/2024 8:40 43583 gradle-wrapper.jar-a---- 4/10/2024 8:40 253 gradle-wrapper.properties
Aquesta carpeta té el fitxer JAR i la configuració del Gradle Wrapper.
Aquesta aplicació s’executa amb el fitxer gradlew.bat
(per Windows) o gradlew
(per macOs i Linux).
El “Gradle Wrapper” utilitza una versió concreta de Gradle, i si aquesta versió no està a l’ordinador, la baixa directament d’Internet.
D’aquesta manera qualsevol usuari que treballa amb el projecte utilitzarà la mateixa versió de Gradle, encara que no tingui instal.lat Gradle a l’ordinador.
Projecte
Section titled “Projecte”La configuració del projecte està en el fitxer settings.gradle.kts
.
Si mires el contingut del fitxer pots veure que el nom del projecte és “gradle” i que inclou el subprojecte “app”:
> gc .\settings.gradle.kts
rootProject.name = "gradle"include("app")
Un projecte es composa de 1 o més subprojectes.
Quan has executat l’ordre gradle init
, has dit que volies crear una aplicació Kotlin mitjançant el paràmetre --type kotlin-application
.
En la carpeta app
està el codi del teu subprojecte:
> ls .\app\
Directory: C:\Users\david\gradle\app
Mode LastWriteTime Length Name---- ------------- ------ ----d----- 4/10/2024 9:09 src-a---- 4/10/2024 9:09 1409 build.gradle.kts
En aquesta carpeta tens:
- El fitxer
build.gradle.kts
que té la configuració del subprojecte “app” - La carpeta
src
on està tot el codi del projecte.
Executa aquesta ordre per executar la tasca build
:
> .\gradlew build
BUILD SUCCESSFUL in 4s7 actionable tasks: 7 executed
Observació. Powershell executa l’script gradlew.bat
encara que no posis .bat
al final.
La primera vegada que executes el “wrapper”, el “wrapper” baixa i guarda en cache els binaris Gradle si aquests no estan instal.lats a l’ordinador.
La tasca build
utlitza el codi font i les seves dependències per construit l’aplicació.
Si executes l’ordre ls
pots veure que s’han creat dos carpetes noves: .gradle
i .kotlin
.
> ls
Directory: C:\Users\david\gradle
Mode LastWriteTime Length Name---- ------------- ------ ----d----- 4/10/2024 8:54 .gradled----- 4/10/2024 8:54 .kotlind----- 4/10/2024 8:54 appd----- 4/10/2024 8:51 gradle-a---- 4/10/2024 8:51 290 .gitattributes-a---- 4/10/2024 8:51 108 .gitignore-a---- 4/10/2024 8:51 8762 gradlew-a---- 4/10/2024 8:51 2966 gradlew.bat-a---- 4/10/2024 8:51 535 settings.gradle.kts
En la carpeta .gradle
tens una instal.lació local de Gradle que es la que utilitza el projecte mitjançant l’script gradlew
.
A més, la tasca build
també ha generat la carpeta app\build
:
> ls .\app\build\
Directory: C:\Users\david\gradle\app\build
Mode LastWriteTime Length Name---- ------------- ------ ----d----- 4/10/2024 8:23 classesd----- 4/10/2024 8:23 distributionsd----- 4/10/2024 8:23 kotlind----- 4/10/2024 8:23 libsd----- 4/10/2024 8:23 reportsd----- 4/10/2024 8:23 scriptsd----- 4/10/2024 8:23 test-resultsd----- 4/10/2024 8:23 tmp
En aquesta carpeta es guarda tot el que es genera a partir del codi que has escrit.
El fitxer app/build.gradle.kts
té configurat quina és la classe principal de l’aplicació:
application { mainClass = "gradle.AppKt"}
Aquesta classe está a la ruta /app/src/main/kotlin/gradle/App.kt
Amb la tasca run
pots executa l’aplicació:
> .\gradlew run
Hello World!
BUILD SUCCESSFUL in 2s2 actionable tasks: 1 executed, 1 up-to-date
Obre el fitxer App.kt
amb el “bloc de notes” del Windows:
notepad.exe .\app\src\main\kotlin\gradle\App.kt
Modifica el contingut del fitxer:
package gradle
fun main() { println("Hello World!")}
Torna a executar l’aplicació:
> gradle run
Hello World!
BUILD SUCCESSFUL in 1s
A continuació anem a crear un test.
Mofifica el fitxer AppTest.kt
que està en la carpeta app/src/test/kotlin/gradle/AppTest.kt
.
> notepad.exe .\app\src\test\kotlin\gradle\AppTest.kt
Crea un test que no funciona:
package gradle
import kotlin.test.*
class AppTest { @Test fun myTest() {
assertEquals(3, 5) }}
Amb la tasca test
verifica que no funciona:
> gradle test
AppTest > myTest() FAILED org.opentest4j.AssertionFailedError at AppTest.kt:8
1 test completed, 1 failed
FAILURE: Build failed with an exception.
* What went wrong:Execution failed for task ':app:test'.> There were failing tests. See the report at: file:///C:/Users/david/gradle/app/build/reports/tests/test/index.html
* Try:> Run with --scan to get full insights.
BUILD FAILED in 1s3 actionable tasks: 1 executed, 2 up-to-date
El resultat és que at AppTest.kt:8
… 😮, 3 no és igual a 5 😇
Obre en el navegador la URL file:///...
i tens un “report” més bonic.
{% image “test-report.png” %}
Modifica l’asserEquals
perquè el test funcioni:
{% sol %}
package gradle
import kotlin.test.*
class AppTest { @Test fun myTest() {
assertEquals(5, 5) }}
{% endsol %}
Verifica que funciona:
> gradle test
BUILD SUCCESSFUL in 1s3 actionable tasks: 2 executed, 1 up-to-date
Dependències
Section titled “Dependències”Un projecte necessita moltes funcionalitats que no estan a les biblioteques estàndards.
Per exemple, si vull crear gràfics puc utilitzar la biblioteca Kandy.
En el fitxer build.gradle.kts
del subprojecte “app” pots declarar dependències.
Modifica l’entrada dependencies
i afegeix una dependència amb “Kandy”:
dependencies {
// ...
implementation("org.jetbrains.kotlinx:kandy-lets-plot:0.7.0")}
Modifica el fitxer App.kt
per crea un diagrama de barres:
package gradle
import org.jetbrains.kotlinx.dataframe.api.*import org.jetbrains.kotlinx.kandy.dsl.*import org.jetbrains.kotlinx.kandy.letsplot.export.saveimport org.jetbrains.kotlinx.kandy.letsplot.layers.bars
fun main() { val averageTemperature = dataFrameOf( "city" to listOf("New York", "London", "Berlin", "Yerevan", "Tokyo"), "average temperature" to listOf(12.5, 11.0, 9.6, 11.5, 16.0) )
averageTemperature.plot { bars { x("city") y("average temperature") { axis.name = "Average Temperature (°C)" } } }.save("plot.png", path = ".")}
Executa l’aplicació:
> .\gradlew run
BUILD SUCCESSFUL in 3s2 actionable tasks: 1 executed, 1 up-to-date
Obre el fitxer app\plot.png
que s’acaba de crear:
> mspaint.exe .\app\plot.png
Plugins
Section titled “Plugins”Gradle s’estructura al voltat de “plugins” que afegeixen funcionalitat.
Per exemple, si vols crear una distribució del teu projecte has d’afegir el “plugin” application
.
Com que a l’inici has dit que el projecte és de tipus kotlin-application
, en la secció plugins
del fitxer build.gradle.kts
del subprojecte “app” ja s’ha declarat el plugin:
Si executes la tasca distZip
per crear una distribuxió del teu projecte:
> gradle distZipBUILD SUCCESSFUL in 2s4 actionable tasks: 3 executed, 1 up-to-date
En el “path” app/build/distributions/
està el fitxer:
> ls .\app\build\distributions\
Directorio: C:\Users\david\gradle\app\build\distributions
Mode LastWriteTime Length Name---- ------------- ------ -----a---- 09/10/2024 17:08 4551293 app.zip
Descomprimeix el fitxer a la carpeta dist
:
> Expand-Archive -Path .\app\build\distributions\app.zip dist
Ja pots executar l’aplicació directament:
> .\dist\app\bin\app...
I, si elimines el plugin application
del fitxer build.gradle.kts
la tasca distZip
desapareixerà:
> gradle distZip
Configure project :appe: file:///C:/Users/ddemingo/gradle/app/build.gradle.kts:41:1: Expression 'application' cannot be invoked as a function. The function 'invoke()' is not found...
Wrapper
Section titled “Wrapper”https://docs.gradle.org/current/userguide/gradle_wrapper.html
The following command upgrades the Wrapper to the latest
version:
> ./gradlew wrapper --gradle-version latest
The following command upgrades the Wrapper to a specific version:
$ ./gradlew wrapper --gradle-version 8.11
BUILD SUCCESSFUL in 4s1 actionable task: 1 executed
Once you have upgraded the wrapper, you can check that it’s the version you expected by executing ./gradlew --version
.
Don’t forget to run the wrapper
task again to download the Gradle distribution binaries (if needed) and update the gradlew
and gradlew.bat
files.
El contingut d'aquest lloc web té llicència CC BY-NC-ND 4.0.
©2022-2025 xtec.dev