Rufen Sie Befehlszeilenargumente von spring-boot:run ab

Lesezeit: 6 Minuten

Benutzer-Avatar
Sandris

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?

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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"

  1. spring-boot-maven-plugin Version und die Spring 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-parentvergessen Sie nicht, die Version von auszurichten spring-boot-maven-plugin mit der genauen Version von spring boot Sie verwenden möchten.

  1. Ü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.
  1. Ü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;
   }
   ...
 }
  1. 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.

Benutzer-Avatar
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

Benutzer-Avatar
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"

Benutzer-Avatar
aakoch

Und wenn Sie Eclipse verwenden …

| Parameter Name | Value         |
| run.arguments  | "--name=Adam" |

1175040cookie-checkRufen Sie Befehlszeilenargumente von spring-boot:run ab

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy