String arrays som kommandolinjeargumenter for maven plugin

stemmer
17

Jeg skriver en maven plugin som har en parameter som er en String [].

Som dette:

/**
* @parameter expression=${args}
*/
protected String[] args;

Dette kan utnyttes gjennom POM som dette:

<args>
  <arg>arg1</arg>
  <arg>arg2</arg>
<args>

Men jeg ønsker å sende den inn fra kommandolinjen

-Dargs={arg1, arg2}

Er dette mulig?

Publisert på 26/08/2009 klokken 14:51
kilden bruker
På andre språk...                            


5 svar

stemmer
10

Du kan ikke gjøre det direkte så vidt jeg vet, men det er ganske vanlig praksis å akseptere et avgrenset streng og dele det inn i en matrise selv.

For eksempel den maven-sete-plugin gjør det mulig å spesifisere en kommaavgrenset String of steder, mens den maven-scala-plugin håndterer dette ved at man for å definere argumentene med en rørseparator. Du kan se på relevant Mojos å se hvordan argumentet er behandlet.

Noen eksempler på bruk under:

site-plugin:

-Dlocales=enGB,frFR

scala-plugin:

-DaddArgs=arg1|arg2|arg3

Oppdatering: hvis du ønsker å håndtere dette mer elegant, kan du bruke maven-delt-io å tillate definisjonen av en ekstern beskrivelsesfilen, deretter passere descriptor plassering som en eiendom. Dette betyr at en enkelt kommandolinje-argumentet kan referere til en struktur av konfigurasjon.

Hvis dette høres ut som det kan fungere for deg, ta en titt på dette svaret som beskriver hvordan du bruker eksterne beskrivelsene i egenskapene plugin, eller dette svaret som gjør lignende for xml-maven-plugin. Eller du kan bare se på samle plugin for ideer.

Svarte 27/08/2009 kl. 08:53
kilden bruker

stemmer
7

Nyeste maven (3.0.3) bør arbeider med:

-DaddArgs = Arg1, arg2, arg3

Svarte 18/05/2011 kl. 14:59
kilden bruker

stemmer
1

Ifølge Sonatype blogg her , hvis du er en plugin utvikler og

  1. bruke Maven 3
  2. og kommentere array / samling typen plugin parameter ved hjelp merknad som:

    /** @parameter expression="${args}" */

På denne måten kan det plugg parameter behandles av Maven automatisk og plugg-brukere kan gi plugin matrise / samling typeparametere via CLI ved hjelp av en komma adskilt system egenskap som mvn myplugin:mygoal -Dargs=a,b,c

Svarte 09/03/2017 kl. 02:58
kilden bruker

stemmer
1

For å oppdatere på @ nybon oss svare litt, virker det

@Parameter(property="your.param")
private List<String> yourParam;

verk, i det minste ved anvendelse maven-plugin-annotations:3.5i Maven 3.5.0. kjører med

-Dyour.param=val1,val2

setter listen.

Svarte 21/06/2017 kl. 21:18
kilden bruker

stemmer
1

Den måten å angi en liste over verdier via system eiendom, for en plugin avhenger av hvor oppdatert plugin er.

Men hvis du har å gjøre med en skikkelig implementert plugin som er oppdatert, så den riktige måten å angi en matrise med verdier til en plugin er via kommadelte strenger.

Her er en referanse: http://blog.sonatype.com/2011/03/configuring-plugin-goals-in-maven-3/

Her er et sitat fra referanse:

For mange plugin parametere er det av og til hensiktsmessig å spesifisere deres verdier fra kommandolinjen via systemegenskaper. Tidligere var dette begrenset til parametere av enkle typer som streng eller Boolsk. Den nyeste Maven utgivelsen endelig tillater plugin brukere å konfigurere samlinger eller arrays fra kommandolinjen via kommaseparert strenger. Ta for eksempel en plugin parameter som dette:

Går litt lenger, kan vi se på mer konkret eksempel. Tenk, det wildfly maven plugin. Dette programtillegget har avskrevet konfigurasjon egenskap kalt: jvmArgs.

Dette var ventet å bli ført inn i et rom adskilt liste over verdier. Som vi alle vet, i kommandolinjen, rote rundt med mellomrom er ikke søt. Så hvis vi ser på definisjonen av dette paramter i plugin mojo koden, vil du finne noe som dette (her går et annet sitat).

/**
 * A space delimited list of JVM arguments.
 *
 * @deprecated use {@link #javaOpts}
 */
@Parameter(alias = "jvm-args", property = PropertyNames.JVM_ARGS)
@Deprecated
private String jvmArgs;

Så dette er den gamle måten å gjøre ting.

Nå, hvis du bruker den nyeste versjonen av denne plugin (f.eks Alpha6). Deretter kildekoden vil ha en fin nytt felt kalt javaOpts. La oss se på hva feltet ser ut i koden.

/**
 * The JVM options to use.
 */
@Parameter(alias = "java-opts", property = PropertyNames.JAVA_OPTS)
private String[] javaOpts;

Så det vi ser er at vi har en fin rekke felt i StartMojo. Denne rekken feltet er riktig annoted. Og maven motoren vil gjøre de tunge løftene om å sette verdiene inn i Mojo.

Når du ønsker å pumpe data i dette feltet via kommandolinjen, ville du i deg batch fil angir noe på formen:

-Dwildfly.javaOpts="-Xmx1536M,-Xms1536M,-XX:MaxMetaspaceSize=512M,-XX:-HeapDumpOnOutOfMemoryError"

Hvis du prøver samething hjelp sapces stedet for commans. Jeg vil vise deg hva som skjer:

[INFO] selvstendig server starter opp. Ugyldig maksimal heap størrelse: -Xmx1536M -XX: MaxMetaspaceSize = 512M XX: -HeapDumpOnOutOfMemoryError

Så du ser, maven når det med svelging mitt system eiendom full av områder det ikke gjorde en streng splittet. Så wildfly prøvde å setup JVM minneinnstillinger som om max minne var at full streng. På den annen side, når jeg bruker komma for å skille det, Mojo er riktig beriket og jeg kan ta kontroll over minne innstillingene til app-serveren når den starter opp.

Og selvfølgelig, du ønsker å bruke systemets egenskaper og ikke pom.xml XML konfigurasjon, for oppgaver som å sette opp Jenkins jobber. Med systemegenskaper er du heller mer fleksibel.

Det er det.

Svarte 29/07/2017 kl. 17:39
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more