Gibt es eine Möglichkeit, Argumente beim Starten der Spring-Boot-Anwendung (mvn spring-boot:run) über die Befehlszeile einzugeben und sie dann in main() abzurufen?
Rufen Sie Befehlszeilenargumente von spring-boot:run ab
Sandris
geound
Mit Blick auf die Quellcode des Spring-Boot-Maven-Plugins habe ich festgestellt, dass Sie Folgendes tun müssen:
mvn spring-boot:run -Drun.arguments="arg1,arg2"
Eine weitere Möglichkeit, um weitere Informationen darüber zu erhalten, welche Optionen die run
Ziel der spring-boot
Plugin unterstützt, ist die Ausführung des folgenden Befehls:
mvn help:describe -Dcmd=spring-boot:run -Ddetail
Für Spring Boot 2.x ist die Quelle hier und Sie müssen jetzt verwenden -Dspring-boot.run.arguments="args1,args2"
(Bearbeitung von April 2021) Für Spring Boot 2.2+ müssen Sie jetzt verwenden -Dspring-boot.run.arguments="args1 args2"
Wenn Sie Gradle verwenden und Befehlszeilenargumente an Gradle übergeben möchten bootRun
Aufgabe müssen Sie zuerst konfigurieren, zum Beispiel so:
bootRun {
if ( project.hasProperty('args') ) {
args project.args.split('\\s+')
}
}
und führen Sie die Aufgabe mit aus gradle bootRun -Pargs="arg1 arg2"
-
Vielen Dank. +1 für deine Antwort.
– sukrit007
27. September 2014 um 21:36 Uhr
-
@sukrit007 Schön, dass es dir geholfen hat!
– geound
27. September 2014 um 23:40 Uhr
-
Ziemlich dumm von ihnen, Kommas über den Standard-Leerzeichen zu akzeptieren. RTFM-Frühling: docs.oracle.com/javase/tutorial/essential/environment/…
– Ravindranath Akila
19. April 2015 um 7:42 Uhr
-
Mit Gradle 3.3 hat bei mir folgende Modifikation funktioniert:
bootRun { // Usage: gradle bootRun -Pargs="arg1 arg2" if ( project.hasProperty('args') ) { args = (project.args.split("\\s+") as List) } }
– Farrukh Najmi
18. April 2017 um 18:19 Uhr
-
Ab Spring Boot 2 sollten Sie verwenden
-Dspring-boot.run.arguments=
– mapm
12. April 2018 um 3:01 Uhr
Jebuselwyn Martin
Wenn mehrere Argumente mit -Drun.arguments übergeben werden und das Argument wiederum durch Kommas getrennte Werte hat, wird nur der erste Wert jedes Arguments verwendet. Um dies zu vermeiden, wiederholen Sie das Argument so oft wie die Anzahl der Werte.
Das ist eher ein Workaround. Nicht sicher, ob es eine Alternative gibt, es sei denn, das Trennzeichen ist anders – wie ‘|’.
Bsp Problem:
mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"
Wählt nur das ‘Test’-Profil 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.
-
Ab Spring Boot 2 sollten Sie verwenden
-Dspring-boot.run.arguments=
– mapm
12. April 2018 um 3:02 Uhr
davidxxx
Beachten Sie: Die Art und Weise der Übergabe von Argumenten hängt von der ab spring-boot
Haupt.Nebenversion.
TLDR
Für Spring Boot 1:
mvn spring-boot:run -Drun.arguments="argOne,argTwo"
Für Spring Boot 2.0 und 2.1:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
(bearbeitet von April 2021) Für Spring Boot 2.2 und höher:
mvn spring-boot:run -Dspring-boot.run.arguments="argOne argTwo"
spring-boot-maven-plugin
Version und dieSpring Boot
Version, die Sie verwenden, muss angepasst werden.
Je nach verwendeter Spring Boot-Hauptversion (1
oder 2
), das spring-boot-maven-plugin
in dem 1
oder der 2
Version sollte tatsächlich verwendet werden.
Wenn dein pom.xml
erbt von der spring-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>
Im Falle Ihres pom.xml
nicht erben von spring-boot-starter-parent
vergessen Sie nicht, die Version von auszurichten spring-boot-maven-plugin
mit der genauen Version von spring boot
Sie verwenden möchten.
- Übergeben von Argumenten in der Befehlszeile mit 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"
Das 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.
- Übergeben von Argumenten in der Befehlszeile mit 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 Version 2.XX nicht gefunden, die sich darauf bezieht.
Aber die org.springframework.boot.maven.AbstractRunMojo
Klasse der spring-boot-maven-plugin:2.0.0.M3
plugin verweist 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;
}
...
}
-
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"]
(Bearbeitung vom März 2021)
Leerzeichen werden jetzt als Trennzeichen für Befehle mit mehreren Argumenten verwendet, siehe die entsprechenden Ausgabe.
-
Wie geben Sie Argumente innerhalb der pom.xml an
configuration
Abschnitt des Plugins? Ich habe es versucht<arguments><argument>-Dprop=value</argument></arguments>
aber es nimmt den Eigenschaftswert nicht auf diese Weise auf.– Benutzer1902183
18. Januar 2018 um 1:31 Uhr
-
@ user1902183 verwenden
<arguments><argument>--prop=value</argument></arguments>
– spritzen
7. Juni 2018 um 16:03 Uhr
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"
Denn Hilfe sagt:
commandlineArguments User property: spring-boot.run.arguments Arguments from the command line that should be passed to the application. Use spaces to separate multiple arguments and make sure to wrap multiple values between quotes. When specified, takes precedence over arguments.
davidxxx
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 der Spring Boot Maven profiles
Eigentum das ist eine bequeme Abkürzung von spring.profiles.active
wie die folgenden:
Die Maven-Benutzereigenschaft unterscheidet sich je nach Spring Boot-Version.
Für Spring Boot 1.4+, das heißt run.profiles
:
mvn spring-boot:run -Drun.profiles=dev,test
Für Spring Boot 2, das heißt spring-boot.run.profiles
:
mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
Aus der Plugin-Dokumentation:
Profile:
Die zu aktivierenden Federprofile. Praktische Abkürzung zur Angabe des Arguments „spring.profiles.active“. Verwenden Sie in der Befehlszeile Kommas, um mehrere Profile zu trennen.
Typ: java.lang.String[]
Seit: 1.3
Erforderlich: Nein
Benutzereigenschaft: spring-boot.run.profiles
Esaldino Fonseca
Ich verwende spring.boot 2.4.2 und habe die Argumente mit Leerzeichen getrennt und die Werte in doppelte Anführungszeichen gesetzt.
mvn spring-boot:run -Dspring-boot.run.arguments="--param1=value2 --param2=value2"
aakoch
Und wenn Sie Eclipse verwenden …
| Parameter Name | Value | | run.arguments | "--name=Adam" |