Saya telah memindahkan proyek dari Eclipse ke Maven dan saya perlu menetapkan variabel lingkungan agar proyek saya berfungsi.
Di Eclipse, saya pergi ke "Run -> Run configurations" dan, di bawah tab "environment", saya set "WSNSHELL_HOME" ke nilai "conf".
Bagaimana saya bisa melakukan ini dengan Maven?
Terima kasih banyak!
java
maven
environment-variables
Gianluca
sumber
sumber
Jawaban:
Anda bisa meneruskannya di baris perintah, sebagai
mvn -DmyVariable=someValue install
[Perbarui] Perhatikan bahwa urutan parameternya signifikan - Anda perlu menentukan opsi apa pun sebelum perintah. [/Memperbarui]
Di dalam file POM, Anda dapat merujuk ke variabel sistem (ditentukan pada baris perintah, atau di pom) sebagai
${myVariable}
, dan variabel lingkungan sebagai${env.myVariable}
. (Terima kasih kepada pemberi komentar atas koreksinya.)Pembaruan2
Oke, jadi Anda ingin meneruskan variabel sistem Anda ke pengujian Anda. Jika - seperti yang saya asumsikan - Anda menggunakan plugin Surefire untuk pengujian, yang terbaik adalah menentukan variabel sistem yang diperlukan di dalam pom, di
plugins
bagian Anda , misalnya<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>
sumber
mvn -DWSNSHELL_HOME=conf test
.System.getenv("WSNSHELL_HOME");
apakah itu benar?The
-D
properti tidak akan diandalkan diperbanyak dari jitu-pluging untuk menguji Anda (saya tidak tahu mengapa ia bekerja dengan gerhana). Saat menggunakan maven pada baris perintah, gunakan properti argLine untuk menggabungkan properti Anda. Ini akan membuat mereka lulus ujianmvn -DargLine="-DWSNSHELL_HOME=conf" test
Gunakan
System.getProperty
untuk membaca nilai dalam kode Anda. Lihat posting ini tentang perbedaanSystem.getenv
danSytem.getProperty
.sumber
${argLine}
placeholder, jika tidak, parameter dari baris perintah tidak akan diambil. Contoh:<argLine>-Duser.timezone=UTC ${argLine}</argLine>
Anda bisa membungkus perintah maven Anda dalam skrip bash:
#!/bin/bash export YOUR_VAR=thevalue mvn test unset YOUR_VAR
sumber
mvn install
, entah bagaimana mereka masih dikaburkan. Namun, jika saya menjalankan dari skrip shell, itu berfungsi dengan baik! Saya berharap saya mengerti mengapa ini terjadi.Untuk variabel lingkungan di Maven, Anda dapat mengatur di bawah ini.
http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#environmentVariables http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html #environmentVariables
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-failsafe-plugin</artifactId> ... <configuration> <includes> ... </includes> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration> </plugin>
sumber
Ada sebuah plugin maven bernama properties-maven-plugin yang satu ini memberikan tujuan
set-system-properties
untuk mengatur variabel sistem. Ini sangat berguna jika Anda memiliki file yang berisi semua properti ini. Jadi Anda dapat membaca file properti dan mengaturnya sebagai variabel sistem.sumber
Solusi lain adalah mengatur
MAVEN_OPTS
(atau variabel lingkungan lainnya) di${user.home}/.mavenrc
(atau%HOME%\mavenrc_pre.bat
di windows).Sejak Maven 3.3.1 ada kemungkinan baru untuk mengatur parameter baris perintah mvn , jika ini yang Anda inginkan:
${maven.projectBasedir}/.mvn/maven.config
${maven.projectBasedir}/.mvn/jvm.config
sumber
di kode Anda tambahkan:
System.getProperty("WSNSHELL_HOME")
Ubah atau tambahkan properti nilai dari perintah maven:
mvn clean test -DargLine=-DWSNSHELL_HOME=yourvalue
Jika Anda ingin menjalankannya di Eclipse, tambahkan argumen VM dalam konfigurasi Debug / Run Anda
Anda tidak perlu memodifikasi POM
sumber
Berikut dokumentasi dari jawaban @ Kevin, yang di bawah ini berfungsi untuk saya untuk mengatur variabel lingkungan dengan plugin maven sure-fire
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <environmentVariables> <WSNSHELL_HOME>conf</WSNSHELL_HOME> </environmentVariables> </configuration>
sumber
Anda dapat meneruskan beberapa argumen melalui
_JAVA_OPTIONS
variabel.Misalnya, tentukan variabel untuk tanda proxy maven seperti ini:
_JAVA_OPTIONS="-Dhttp.proxyHost=$http_proxy_host -Dhttp.proxyPort=$http_proxy_port -Dhttps.proxyHost=$https_proxy_host -Dhttps.proxyPort=$http_proxy_port"
Dan kemudian gunakan
mvn clean install
(secara otomatis akan mengambil_JAVA_OPTIONS
).sumber