Maven ile Ortam Değişkeni


87

Eclipse'den Maven'e bir proje taşıdım ve projemin çalışması için bir ortam değişkeni ayarlamam gerekiyor.

Eclipse'de "Çalıştır -> Yapılandırmaları çalıştır" a gidiyorum ve "ortam" sekmesi altında "WSNSHELL_HOME" öğesini "conf" değerine ayarlıyorum.

Bunu Maven ile nasıl yapabilirim?

Çok teşekkür ederim!


Projenizi ortam değişkeni olmadan çalıştırmanızı öneririm. Ve sonra maven'e geçin.
khmarbaise

3
Sisteminiz için yararlıysa ortam değişkenlerinin kullanımını atlamak için bir neden yok ve çözümümün çalıştığından eminim (kendim kullanıyorum). 'System.getenv' / 'System.getProperty' ile ilgili ipucuma bakın.
FrVaBe

Yanıtlar:


124

Bunu komut satırından aktarabilirsiniz.

mvn -DmyVariable=someValue install

[Güncelle] Parametrelerin sırasının önemli olduğunu unutmayın - komutlardan önce herhangi bir seçeneği belirtmeniz gerekir .[/Güncelleme]

POM dosyası içinde, sistem değişkenlerine (komut satırında veya pom'da belirtilen) olarak ${myVariable}ve ortam değişkenlerine ${env.myVariable}. (Düzeltme için yorumculara teşekkürler.)

Güncelleme2

Tamam, yani sistem değişkeninizi testlerinize geçirmek istiyorsunuz. Eğer - tahmin ettiğim gibi - test için Surefire eklentisini kullanıyorsanız , en iyisi sizin pluginsbölümünüzde pom içinde gerekli sistem değişkenlerini belirtmektir , örn.

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

'Mvn testi'ni başlatmam gerekiyor, işe yaramıyor, çünkü mvn testi yazarsam -DWSNSHELL_HOME = conf hala java.io.FileNotFoundException istisnasını alıyorum: null / wsnshell.conf (Böyle bir dosya veya dizin yok)
Gianluca

3
@Janky, başka bir şekilde dene, yani mvn -DWSNSHELL_HOME=conf test.
Péter Török

hayır ... :( Hala java.io.FileNotFoundException alıyorum: null / wsnshell.conf (Böyle bir dosya veya dizin yok) ... kodda değişkeni bu şekilde okudum .. System.getenv("WSNSHELL_HOME");doğru mu?
Gianluca

@Janky, bir dakika bekle, uygulamayı doğrudan Maven yapısından mı çalıştırıyorsun yoksa ...?
Péter Török

47
Siz ikiniz Ortam Değişkenlerini Sistem Özellikleri ile karıştırıyorsunuz. -D komut seçeneği yalnızca Sistem Özelliklerini ayarlar.
Wouter Lievens

26

-DÖzellikleri Surefire-pluging Testinize güvenilir yayılmaz (tutulmanın ile çalışır neden bilmiyorum). Komut satırında maven kullanırken, mülkünüzü sarmak için argLine özelliğini kullanın. Bu onları testinize geçirecek

mvn -DargLine="-DWSNSHELL_HOME=conf" test

System.getPropertyKodunuzdaki değeri okumak için kullanın . Bir göz bu bir fark hakkında yazı System.getenvve Sytem.getProperty.


2
Özelliği System.getenv kullanmak yerine System.getProperty ("WSNSHELL_HOME") ile okumalısınız.
FrVaBe

Mükemmel, başka şeyler denemek için ÇOK zaman harcadıktan sonra, bu benim için çalıştı.
Bhushan

Pom.xml'nizde surefire eklentisi için argLine parametrelerini yapılandırdıysanız, ${argLine}yer tutucuyu ekleyin , aksi takdirde komut satırındaki parametreler alınmayacaktır. Örnek:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
sorrymissjackson

Bu benim için çalıştı, teşekkürler! Maven testleri için sys-props yapılandırmak için ne harika bir araç. Yine de ilk bakışta, onları doğrudan kullanamaması çok kafa karıştırıcı, ancak fazladan bir argüman gerektiriyor.
phi

10

Maven komutunuzu bir bash betiğine sarabilirsiniz:

#!/bin/bash

export YOUR_VAR=thevalue
mvn test
unset YOUR_VAR

İnanılmaz bir şekilde, Surefire eklentisini kullanarak benim için tamamen işe yarayan tek yöntem budur. POM'da belirlediğim 10 veya daha fazla ortam değişkeninden ikisi test çalıştırıldığında görülmüyor. Onları kabuğa koysam ve sonra mvn installbile, hala bir şekilde gizleniyorlar. Ancak, bir kabuk betiğinden çalıştırırsam iyi çalışıyor! Keşke bunun neden olduğunu anlasaydım.
Pete

Bu en basit çözüm olduğu için bunun kabul edilmiş bir cevap olması gerektiğine inanıyorum
wtsiamruk

5

Maven'deki ortam değişkeni için aşağıdan ayarlayabilirsiniz.

http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #Ortam Değişkenleri

<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

Properties -maven- plugin adında bir maven eklentisi var, bu eklentiset-system-properties sistem değişkenlerini ayarlamak için bir hedef sağlıyor. Bu, özellikle tüm bu özellikleri içeren bir dosyanız varsa kullanışlıdır. Böylece bir özellik dosyasını okuyabilir ve bunları sistem değişkeni olarak ayarlayabilirsiniz.


3

Başka bir çözüm, MAVEN_OPTS(veya diğer ortam değişkenlerini) içinde ${user.home}/.mavenrc(veya %HOME%\mavenrc_pre.batpencerelerde) ayarlamak olabilir.

Maven 3.3.1'den beri , gerçekten istediğiniz buysa, mvn komut satırı parametrelerini ayarlamak için yeni olasılıklar vardır :

  • ${maven.projectBasedir}/.mvn/maven.config
  • ${maven.projectBasedir}/.mvn/jvm.config

1

kodunuza şunu ekleyin:

System.getProperty("WSNSHELL_HOME")

Maven komutundan değer özelliğini değiştirin veya ekleyin:

mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue

Eclipse'de çalıştırmak istiyorsanız, Debug / Run konfigürasyonlarınıza VM argümanları ekleyin

  • Çalıştır -> Yapılandırmaları çalıştır'a gidin
  • Sekme Bağımsız Değişkenlerini Seçin
  • Bölüm VM Argümanlarını ekleyin

-DWSNSHELL_HOME = değeriniz

Resim örneğine bakın

POM'u değiştirmenize gerek yok


1

@ Kevin'in cevabından alınan dokümantasyonu takiben, aşağıdaki maven sure-fire eklentisi ile ortam değişkenini ayarlamak için benim için çalıştı

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

0

_JAVA_OPTIONSDeğişken aracılığıyla bazı argümanları iletebilirsiniz .

Örneğin, aşağıdaki gibi maven proxy bayrakları için bir değişken tanımlayın:

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

Ve sonra kullanın mvn clean install(otomatik olarak açılacaktır _JAVA_OPTIONS).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.