Prolazak argumenata naredbenog retka u Gradleu

1. Pregled

Ponekad želimo izvršiti razne programe iz Gradlea koji zahtijevaju ulazne parametre.

U ovom brzom vodiču vidjet ćemo kako iz Gradlea proslijediti argumente naredbenog retka.

2. Vrste ulaznih argumenata

Kada želimo proslijediti ulazne argumente iz Gradle CLI-ja, imamo dva izbora:

  • postavljanje svojstava sustava pomoću -D zastava
  • postavljanje svojstava projekta pomoću -P zastava

Općenito, trebali bismo koristiti svojstva projekta osim ako ne želimo prilagoditi postavke u JVM-u.

Iako je moguće oteti svojstva sustava kako bi prošli naše unose, trebali bismo to izbjegavati.

Pogledajmo ta svojstva na djelu. Prvo konfiguriramo svoj graditi.gradle:

primijeniti dodatak: "java" description = "Primjeri argumenata naredbenog retka Gradle" zadatak propertyTypes () {doLast {if (project.hasProperty ("args")) {println "Naš ulazni argument sa svojstvom projekta [" + project.getProperty (" args ") +"] "} println" Naš ulazni argument sa svojstvom sistema ["+ System.getProperty (" args ") +"] "}} 

Primijetimo da ih u svom zadatku čitamo drugačije.

To radimo jer projekt.getProperty () baca a MissingPropertyException u slučaju da naša imovina nije definirana.

Za razliku od svojstava projekta, System.getProperty () vraća a null vrijednost u slučaju da svojstvo nije definirano.

Dalje, pokrenimo zadatak i vidimo njegov izlaz:

$ ./gradlew propertyTypes -Dargs = lorem -Pargs = ipsum> Zadatak: cmd-line-args: propertyTypes Naš ulazni argument sa svojstvom projekta [ipsum] Naš ulazni argument sa sistemskim svojstvom [lorem] 

3. Pronošenje argumenata naredbenog retka

Do sada smo vidjeli kako čitati svojstva. U praksi, ta svojstva moramo poslati kao argumente našem odabranom programu.

3.1. Prosljeđivanje argumenata Java programima

U prethodnom uputstvu objasnili smo kako iz Gradle pokrenuti glavne klase Java. Nadamo se na tome i vidimo kako također možemo prosljeđivati ​​argumente.

Prvo, krenimo koristite dodatak aplikacije u našem graditi.gradle:

primijeni dodatak: "java" primijeni dodatak: "aplikacija" description = "Primjeri argumenata naredbenog retka Gradle" // prethodne deklaracije ext.javaMain aplikacija {mainClassName = javaMainClass} 

Sada, pogledajmo našu glavnu klasu:

javna klasa MainClass {public static void main (String [] args) {System.out.println ("Primjer argumenata naredbenog retka Gradle"); za (String arg: args) {System.out.println ("Dobio argument [" + arg + "]"); }}} 

Dalje, pokrenimo ga s nekim argumentima:

$ ./gradlew: cmd-line-args: run --args = "lorem ipsum dolor"> Zadatak: cmd-line-args: pokreni Gradle primjeri argumenata naredbenog retka Dobio argument [lorem] Dobio argument [ipsum] Dobio argument [dolor ]

Ovdje ne koristimo svojstva za prosljeđivanje argumenata. Umjesto toga, prolazimo –Arge zastavicu i odgovarajuće ulaze tamo.

Ovo je lijep omot koji pruža dodatak aplikacije. Međutim, ovo je dostupno samo od Gradle 4.9 nadalje.

Da vidimo kako bi ovo izgledalo pomoću a JavaExec zadatak.

Prvo, to moramo definirati u našem graditi.gradle:

ext.javaMain if (project.hasProperty ("args")) {ext.cmdargs = project.getProperty ("args")} else {ext.cmdargs = ""} zadatak cmdLineJavaExec (tip: JavaExec) {group = "Execution" description = "Pokreni glavnu klasu s JavaExecTask" classpath = sourceSets.main.runtimeClasspath main = javaMainClass args cmdargs.split ()} 

Pogledajmo izbliza što smo učinili. Mi prvi pročitajte argumente iz svojstva projekta.

Budući da ovo sadrži sve argumente kao jedan niz, tada ćemo koristiti podjela metoda za dobivanje niza argumenata.

Dalje, mi proslijedite ovaj niz u argumenata vlasništvo naše JavaExec zadatak.

Pogledajmo što se događa kada pokrenemo ovaj zadatak, prosljeđujući svojstva projekta s -P opcija:

$ ./gradlew cmdLineJavaExec -Pargs = "lorem ipsum dolor"> Zadatak: cmd-line-args: cmdLineJavaExec Gradle primjer argumenta naredbenog retka Dobio argument [lorem] Dobio argument [ipsum] Dobio argument [dolor] 

3.2. Prosljeđivanje argumenata drugim aplikacijama

U nekim ćemo slučajevima možda htjeti proslijediti neke argumente neovisnoj aplikaciji Gradle.

Srećom možemo upotrijebite općenitije Izv zadatak učiniti tako:

if (project.hasProperty ("args")) {ext.cmdargs = project.getProperty ("args")} else {ext.cmdargs = "ls"} zadatak cmdLineExec (type: Exec) {group = "Execution" description = "Pokreni vanjski program s ExecTask" commandLine cmdargs.split ()} 

Ovdje mi koristiti commandLine svojstvo zadatka da prenosi izvršnu datoteku zajedno s bilo kojim argumentima. Opet, ulaz dijelimo na temelju razmaka.

Pogledajmo kako to pokrenuti za ls naredba:

$ ./gradlew cmdLineExec -Pargs = "ls -ll"> Zadatak: cmd-line-args: cmdLineExec ukupno 4 drwxr-xr-x 1 korisnik 1049089 0 1. rujna 17:59 bin drwxr-xr-x 1 korisnik 1049089 0 rujna 1 18:30 build -rw-r - r-- 1 korisnik 1049089 1016 3. rujna 15:32 build.gradle drwxr-xr-x 1 korisnik 1049089 0 1. rujna 17:52 src

To može biti vrlo korisno ako ne želimo hard-kod izvršiti u zadatku.

4. Zaključak

U ovom smo brzom vodiču vidjeli kako proslijediti ulazne argumente iz Gradlea.

Prvo smo objasnili vrste svojstava koja možemo koristiti. Iako možemo koristiti svojstva sustava za prosljeđivanje ulaznih argumenata, umjesto toga trebali bismo preferirati svojstva projekta.

Zatim smo istražili različite pristupe za prosljeđivanje argumenata naredbenog retka Javi ili vanjskim aplikacijama.

Kao i obično, cjeloviti kod možete pronaći na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found