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?
Antworten:
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.
-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 von Spring Boot
Ihnen verwendete Version müssen ausgerichtet sein.
Entsprechend der verwendeten Spring Boot-Hauptversion ( 1
oder 2
) sollte tatsächlich die spring-boot-maven-plugin
in der 1
oder der 2
Version verwendet werden.
Wenn Ihr pom.xml
Erbe von 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>
Wenn Sie pom.xml
nicht erben von spring-boot-starter-parent
, vergessen Sie nicht, die Version von spring-boot-maven-plugin
an der genauen Version auszurichten, die spring 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 des spring-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"]
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üpfung spring.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:
Profile :
Die zu aktivierenden Federprofile. Praktische Verknüpfung zum Angeben des Arguments 'spring.profiles.active'. Verwenden Sie in der Befehlszeile Kommas, um mehrere Profile zu trennen.
Geben Sie Folgendes ein: java.lang.String []
Seit: 1.3
Erforderlich: Nein
Benutzereigenschaft: spring-boot.run.profiles
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:
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.
Das hat bei mir funktioniert ( spring-boot v1.4.3.RELEASE
).
mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true
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"