Parancssori érvek átengedése fokozatban

1. Áttekintés

Néha különféle programokat akarunk végrehajtani a Gradle-ból, amelyekhez bemeneti paraméterek szükségesek.

Ebben a gyors bemutatóban megtudjuk, hogyan adhatunk át parancssori argumentumokat a Gradle-ból.

2. Beviteli érvek típusai

Amikor bemeneti argumentumokat akarunk átadni a Gradle parancssori felületről, két lehetőségünk van:

  • a rendszer tulajdonságainak beállítása a -D zászló
  • projekt tulajdonságainak beállítása a -P zászló

Általánosságban, a projekt tulajdonságait kell használnunk, hacsak nem akarjuk testre szabni a JVM beállításait.

Bár lehetséges a rendszer tulajdonságainak eltérítése a bemeneteink átadása érdekében, kerülnünk kell ezt.

Lássuk ezeket a tulajdonságokat működés közben. Először konfiguráljuk a épít.gradle:

plugin alkalmazása: "java" description = "Gradle parancssori argumentumok példák" task propertyTypes () {doLast {if (project.hasProperty ("args")) {println "Beviteli argumentumunk a projekt tulajdonságával [" + project.getProperty (" args ") +"] "} println" Beviteli argumentumunk a rendszer tulajdonságával ["+ System.getProperty (" args ") +"] "}} 

Figyeljük meg, hogy másként olvassuk őket a feladatunk során.

Azért tesszük ezt, mert projekt.getProperty () dob egy MissingPropertyException ha a tulajdonunk nincs meghatározva.

A projekt tulajdonságaitól eltérően System.getProperty () visszatér a nulla érték abban az esetben, ha a tulajdonság nincs meghatározva.

Ezután futtassuk a feladatot, és nézzük meg annak kimenetét:

$ ./gradlew propertyTypes -Dargs = lorem -Pargs = ipsum> Feladat: cmd-line-args: propertyTypes A bemeneti argumentum a projekt tulajdonságával [ipsum] A bemeneti argumentum a rendszer tulajdonságával [lorem] 

3. A parancssori érvek átadása

Eddig láttuk, hogyan kell elolvasni a tulajdonságokat. A gyakorlatban ezeket a tulajdonságokat argumentumként kell elküldenünk a választott programunknak.

3.1. Argumentumok átadása Java alkalmazásoknak

Egy korábbi oktatóanyagban elmagyaráztuk, hogyan futtassuk a Java fő osztályait a Gradle-ból. Építsünk erre, és nézzük meg, hogyan is adhatunk érveket.

Először is használja az alkalmazás plugint a mi oldalunkon épít.gradle:

Apply plugin: "java" Apply plugin: "application" description = "Gradle Parancssor argumentumok példák" // korábbi deklarációk ext.javaMain alkalmazás {mainClassName = javaMainClass} 

Most vessünk egy pillantást fő osztályunkra:

public class MainClass {public static void main (String [] args) {System.out.println ("Gradle parancssori argumentum példa"); mert (String arg: args) {System.out.println ("Got argumentum [" + arg + "]"); }}} 

Ezután futtassuk néhány érvvel:

$ ./gradlew: cmd-line-args: run --args = "lorem ipsum dolor"> Feladat: cmd-line-args: run Gradle parancssori érvek példa Got argument [lorem] Got argument [ipsum] Got argumentum [dolor ]

Itt nem használunk tulajdonságokat argumentumok átadásához. Helyette, elhaladunk a –Args flag és a megfelelő bemenetek ott.

Ez egy szép csomagolás, amelyet az alkalmazás plugin biztosít. Azonban, ez csak a Gradle 4.9-től kezdődően érhető el.

Nézzük meg, hogy nézne ki ez használva JavaExec feladat.

Először meg kell határoznunk a saját épít.gradle:

ext.javaMain if (project.hasProperty ("args")) {ext.cmdargs = project.getProperty ("args")} else {ext.cmdargs = ""} feladat cmdLineJavaExec (típus: JavaExec) {group = "végrehajtás" description = "Futtassa a főosztályt a JavaExecTask segítségével" classpath = sourceSets.main.runtimeClasspath main = javaMainClass args cmdargs.split ()} 

Vizsgáljuk meg közelebbről, amit tettünk. Mi először olvassa el a projekt tulajdonság tulajdonságait.

Mivel ez az összes argumentumot egy karaktersorozatként tartalmazza, akkor mi használja a hasított módszer argumentumok tömbjének megszerzésére.

Ezután mi adja át ezt a tömböt a érvel tulajdonunk JavaExec feladat.

Lássuk, mi történik, amikor ezt a feladatot futtatjuk, a projekt tulajdonságainak átadásával a -P választási lehetőség:

$ ./gradlew cmdLineJavaExec -Pargs = "lorem ipsum dolor"> Feladat: cmd-line-args: cmdLineJavaExec Gradle parancssori argumentumok példa Got argument [lorem] Got argument [ipsum] Got argument [dolor] 

3.2. Érvek átadása más alkalmazásoknak

Bizonyos esetekben érdemes lehet átadni néhány érvet a Gradle harmadik fél általi alkalmazásának.

Szerencsére megtehetjük használja az általánosabbat Exec feladat erre:

if (project.hasProperty ("args")) {ext.cmdargs = project.getProperty ("args")} else {ext.cmdargs = "ls"} feladat cmdLineExec (type: Exec) {group = "Execution" description = "Külső program futtatása az ExecTask alkalmazással" commandLine cmdargs.split ()} 

Tessék, mi használja a parancs sor a feladat tulajdonságát, hogy az argumentumokkal együtt adja át a futtatható fájlt. Ismét felosztjuk a bemenetet szóközök alapján.

Lássuk, hogyan lehet ezt futtatni a ls parancs:

$ ./gradlew cmdLineExec -Pargs = "ls -ll"> Feladat: cmd-line-args: cmdLineExec összesen 4 drwxr-xr-x 1 felhasználó 1049089 0 1. 1. 17:59 bin drwxr-xr-x 1 felhasználó 1049089 0. szept. 1 18:30 build -rw-r - r-- 1 felhasználó 1049089 1016 szeptember 3 15:32 build.gradle drwxr-xr-x 1 felhasználó 1049089 0 szeptember 1 17:52 src

Ez nagyon hasznos lehet, ha nem akarjuk keményen kódolni a futtatható fájlt a feladatban.

4. Következtetés

Ebben a gyors bemutatóban azt láttuk, hogyan lehet átadni a bemeneti argumentumokat Gradle-től.

Először ismertettük a használható tulajdonságok típusait. Bár a rendszer tulajdonságait felhasználhatjuk a bemeneti argumentumok átadására, inkább a projekt tulajdonságait kell előnyben részesítenünk.

Ezután különböző megközelítéseket tártunk fel a parancssori argumentumok Java vagy külső alkalmazásokba történő továbbítására.

Szokás szerint a teljes kód megtalálható a GitHubon.