Gibt es eine Möglichkeit, Argumente einzugeben, wenn Sie die Spring-Boot-Anwendung (mvn spring-boot: run) über die Befehlszeile starten und sie dann in main () abrufen?
quelle
Gibt es eine Möglichkeit, Argumente einzugeben, wenn Sie die Spring-Boot-Anwendung (mvn spring-boot: run) über die Befehlszeile starten und sie dann in main () abrufen?
Beim Betrachten des Quellcodes des Spring-Boot-Maven-Plugins stellte ich fest, dass Sie Folgendes tun müssen:
mvn spring-boot:run -Drun.arguments="arg1,arg2"
Eine andere Möglichkeit, weitere Informationen darüber zu erhalten, welche Optionen run
das spring-boot
Plugin unterstützt, besteht darin, den folgenden Befehl auszuführen:
mvn help:describe -Dcmd=spring-boot:run -Ddetail
Für Spring Boot 2.x ist die Quelle hier und Sie müssen sie jetzt verwenden-Dspring-boot.run.arguments="args1,args2"
Wenn Sie Gradle verwenden und Befehlszeilenargumente an die Gradle- bootRun
Aufgabe übergeben möchten, müssen Sie zunächst Folgendes konfigurieren:
bootRun {
if ( project.hasProperty('args') ) {
args project.args.split('\\s+')
}
}
und führen Sie die Aufgabe mit aus gradle bootRun -Pargs="arg1 arg2"
bootRun { // Usage: gradle bootRun -Pargs="arg1 arg2" if ( project.hasProperty('args') ) { args = (project.args.split("\\s+") as List) } }
-Dspring-boot.run.arguments=
Wenn beim Übergeben mehrerer Argumente mit -Drun.arguments das Argument wiederum durch Kommas getrennte Werte aufweist, wird nur der erste Wert jedes Arguments verwendet. Um dies zu vermeiden, wiederholen Sie das Argument so oft wie die Anzahl der Werte.
Dies ist eher eine Problemumgehung. Ich bin mir nicht sicher, ob es eine Alternative gibt, es sei denn, das Trennzeichen ist anders - wie '|'.
ZB Ausgabe:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"
Wählt nur das Testprofil für den obigen Befehl aus.
Problemumgehung:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"
Wählt sowohl 'dev' als auch 'test' Profile für den obigen Befehl aus.
quelle
-Dspring-boot.run.arguments=
Beachten Sie: Die Art und Weise der Übergabe von Argumenten hängt von der
spring-boot
Hauptversion ab.TLDR
Für Spring Boot 1:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
Für Spring Boot 2:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
1)
spring-boot-maven-plugin
Version und die vonSpring Boot
Ihnen verwendete Version müssen ausgerichtet sein.Entsprechend der verwendeten Spring Boot-Hauptversion (
1
oder2
) sollte tatsächlich diespring-boot-maven-plugin
in der1
oder der2
Version verwendet werden.Wenn Ihr
pom.xml
Erbe vonspring-boot-starter-parent
:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>ONE_OR_TWO_VERSION</version> </parent>
In Ihrem POM sollte die Version des verwendeten Plugins nicht einmal angegeben werden, da diese Plugin-Abhängigkeit vererbt wird:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> ... </configuration> </plugin> </plugins>
Wenn Sie
pom.xml
nicht erben vonspring-boot-starter-parent
, vergessen Sie nicht, die Version vonspring-boot-maven-plugin
an der genauen Version auszurichten, diespring boot
Sie verwenden möchten.2) Übergeben von Argumenten in der Befehlszeile mit dem Spring-Boot-Maven-Plugin: 1.XX.
Für ein Argument:
mvn spring-boot:run -Drun.arguments="argOne"
für mehrere:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
Die Maven Plugin Seite dokumentiert es:
Name Type Since Description arguments | String[] | 1.0 | Arguments that should be passed to the application. On command line use commas to separate multiple arguments. User property is: run.arguments.
3) Übergeben von Argumenten in der Befehlszeile mit dem Spring-Boot-Maven-Plugin: 2.XX.
Für ein Argument:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne"
für mehrere:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
Ich habe die Plugin-Dokumentation für die 2.XX-Version, die darauf verweist, nicht gefunden.
Die
org.springframework.boot.maven.AbstractRunMojo
Klasse desspring-boot-maven-plugin:2.0.0.M3
Plugins bezieht sich jedoch auf diese Benutzereigenschaft:public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo ... @Parameter(property="spring-boot.run.arguments") private String[] arguments; ... protected RunArguments resolveApplicationArguments(){ RunArguments runArguments = new RunArguments(this.arguments); addActiveProfileArgument(runArguments); return runArguments; } ... }
4) Hinweis: Wenn Sie mehr als ein Argument übergeben, werden Leerzeichen zwischen Kommas berücksichtigt.
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
wird interpretiert als
["argOne", "argTwo"]
Aber dieses :
mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"
wird interpretiert als
["argOne", " argTwo"]
quelle
configuration
Abschnitt pom.xml des Plugins an? Ich habe es versucht,<arguments><argument>-Dprop=value</argument></arguments>
aber der Eigenschaftswert wird auf diese Weise nicht erfasst.<arguments><argument>--prop=value</argument></arguments>
Spring Boot 1 als 2 bietet eine Möglichkeit, mehrere Profile als Argument zu übergeben und das Problem im Zusammenhang mit dem Komma zu vermeiden, das sowohl als Trennzeichen zwischen den Argumenten als auch den als aktives Profil übergebenen Werten verwendet wird.
Also anstatt zu schreiben:
mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev
Verwenden Sie die Spring Boot Maven-
profiles
Eigenschaft , die eine praktische Verknüpfungspring.profiles.active
wie die folgenden darstellt:Die Maven-Benutzereigenschaft unterscheidet sich je nach Spring Boot-Version.
Für Spring Boot 1.4+ bedeutet dies
run.profiles
:mvn spring-boot:run -Drun.profiles=dev,test
Für Spring Boot 2 bedeutet dies
spring-boot.run.profiles
:mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
Aus der Plugin-Dokumentation:
quelle
Wie ich heute überprüft habe, lautet die korrekte Verwendung für Spring Boot 2.2.5:
mvn spring-boot:run -Dspring-boot.run.arguments="--arg1=value --arg2=value"
Weil die Hilfe sagt:
quelle
Und wenn Sie Eclipse verwenden ...
quelle
Das hat bei mir funktioniert (
spring-boot v1.4.3.RELEASE
).mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
quelle
Verwenden Sie für die neueste Version von spring -Dspring-boot.run.arguments = wie im folgenden Beispiel gezeigt
spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"
quelle