Variabile d'ambiente con Maven


87

Ho portato un progetto da Eclipse a Maven e ho bisogno di impostare una variabile d'ambiente per far funzionare il mio progetto.

In Eclipse, vado su "Esegui -> Esegui configurazioni" e, nella scheda "ambiente", imposto "WSNSHELL_HOME" al valore "conf".

Come posso farlo con Maven?

Grazie mille!


Suggerirei di far funzionare il tuo progetto senza variabile d'ambiente. E poi passa a Maven.
khmarbaise

3
Non c'è motivo di saltare l'uso delle variabili d'ambiente se è utile per il tuo sistema e sono abbastanza sicuro che la mia soluzione funzioni (la uso io stesso). Vedi il mio suggerimento riguardo a "System.getenv" / "System.getProperty".
FrVaBe

Risposte:


124

Puoi semplicemente passarlo sulla riga di comando, come

mvn -DmyVariable=someValue install

[Aggiorna] Notare che l'ordine dei parametri è significativo: è necessario specificare qualsiasi opzione prima dei comandi. [/Aggiornare]

All'interno del file POM, puoi fare riferimento alle variabili di sistema (specificate sulla riga di comando o nel pom) come ${myVariable}e alle variabili di ambiente come ${env.myVariable}. (Grazie ai commentatori per la correzione.)

Aggiorna 2

OK, quindi vuoi passare la tua variabile di sistema ai tuoi test. Se - come presumo - utilizzi il plugin Surefire per i test, la cosa migliore è specificare le variabili di sistema necessarie all'interno del pom, nella tua pluginssezione, ad es.

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            ...
            <configuration>
                ...
                <systemPropertyVariables>
                    <WSNSHELL_HOME>conf</WSNSHELL_HOME>
                </systemPropertyVariables>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>

Devo avviare 'mvn test', non sembra funzionare, perché se scrivo mvn test -DWSNSHELL_HOME = conf ottengo ancora l'eccezione java.io.FileNotFoundException: null / wsnshell.conf (Nessun file o directory di questo tipo)
Gianluca

3
@ Janky, prova il contrario, ad es mvn -DWSNSHELL_HOME=conf test.
Péter Török

no ... :( ottengo ancora java.io.FileNotFoundException: null / wsnshell.conf (Nessun file o directory di questo tipo) ... nel codice ho letto la variabile in questo modo .. System.getenv("WSNSHELL_HOME");è corretto?
Gianluca

@ Janky, aspetta un minuto, esegui l'app direttamente dalla build Maven o ...?
Péter Török

47
Voi due state confondendo le variabili d'ambiente con le proprietà di sistema. L'opzione del comando -D imposta solo le proprietà del sistema.
Wouter Lievens

26

Le -Dproprietà non saranno propagate in modo affidabile dal plug-in sicuro al tuo test (non so perché funziona con eclipse). Quando si utilizza Maven sulla riga di comando, utilizzare la proprietà argLine per racchiudere la proprietà. Questo li passerà alla tua prova

mvn -DargLine="-DWSNSHELL_HOME=conf" test

Utilizzare System.getPropertyper leggere il valore nel codice. Dai un'occhiata a questo post sulla differenza di System.getenve Sytem.getProperty.


2
È necessario leggere la proprietà con System.getProperty ("WSNSHELL_HOME") invece di utilizzare System.getenv.
FrVaBe

Perfetto, dopo aver passato MOLTO tempo a provare altre cose, questo ha funzionato per me.
Bhushan

Se hai configurato i parametri argLine per il plugin infallibile nel tuo pom.xml, aggiungi il ${argLine}segnaposto, altrimenti i parametri dalla riga di comando non verranno prelevati. Esempio:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson

Questo ha funzionato per me, grazie! Che strumento accurato per configurare sys-props per test esperti. Ancora a prima vista, è molto confuso, perché non può usarli direttamente, ma richiede un argomento in più.
phi

10

Puoi racchiudere il tuo comando Maven in uno script bash:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

Incredibilmente, questo è l'unico metodo che ha funzionato completamente per me utilizzando il plug-in Surefire. Delle 10 o giù di lì vars che ho impostato nel POM, due di loro non vengono visualizzate durante l'esecuzione del test. Anche se li metto nel guscio e poi mvn install, sono ancora in qualche modo oscurati. Tuttavia, se eseguo da uno script di shell, funziona bene! Vorrei aver capito perché questo accade.
Pete

Credo che questa dovrebbe essere una risposta accettata poiché questa è la soluzione più semplice
wtsiamruk

5

Per la variabile di ambiente in Maven, puoi impostare di seguito.

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #variabili ambientali

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    ...
    <configuration>
        <includes>
            ...
        </includes>
        <environmentVariables>
            <WSNSHELL_HOME>conf</WSNSHELL_HOME>
        </environmentVariables>
    </configuration>
</plugin>

4

C'è un plugin Maven chiamato properties-maven-plugin che fornisce l'obiettivo set-system-propertiesdi impostare le variabili di sistema. Ciò è particolarmente utile se hai un file contenente tutte queste proprietà. Quindi sei in grado di leggere un file di proprietà e impostarlo come variabile di sistema.



1

nel tuo codice aggiungi:

System.getProperty("WSNSHELL_HOME")

Modifica o aggiungi proprietà valore dal comando maven:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Se vuoi eseguirlo in Eclipse, aggiungi gli argomenti VM nelle tue configurazioni Debug / Run

  • Vai a Esegui -> Esegui configurazioni
  • Seleziona Tab Arguments
  • Aggiungere nella sezione Argomenti VM

-DWSNSHELL_HOME = tuovalore

Vedi esempio di immagine

non è necessario modificare il POM


1

Seguendo la documentazione dalla risposta di @ Kevin, quella di seguito ha funzionato per me per l'impostazione della variabile di ambiente con il plugin Maven infallibile

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
    <environmentVariables>
        <WSNSHELL_HOME>conf</WSNSHELL_HOME>
    </environmentVariables>
</configuration>

0

Puoi passare alcuni degli argomenti attraverso la _JAVA_OPTIONSvariabile.

Ad esempio, definire una variabile per i flag proxy maven come questo:

_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"

E poi usa mvn clean install(raccoglierà automaticamente _JAVA_OPTIONS).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.