Bagaimana cara merujuk variabel lingkungan di POM.xml?


172

Saya menggunakan pakar sebagai alat bantu. Saya telah menetapkan variabel lingkungan bernama env. Bagaimana saya bisa mendapatkan akses ke nilai variabel lingkungan ini dalam pom.xmlfile?


7
Anda dapat merujuknya dengan $ {env.XXXXXXXX} di mana XXXXXXXX adalah nama variabel Anda. Misalnya $ {env.PATH} akan memberikan referensi PATH.
Seshagiri

2
Tapi Anda mungkin tidak seharusnya. Jika Anda membuat bangunan Anda bergantung pada lingkungan Anda, mereka akan lebih sulit untuk diperbanyak.
Stephen C

5
@StephenC Saya tidak akan mengatakan "tidak boleh", tapi "sangat hati-hati." Terkadang lingkungan CI dan lingkungan pengembang lokal terlihat berbeda dan variabel lingkungan adalah cara untuk mengisi kesenjangan.
Andrew White

1
Bagi saya, IntelliJ 2019 menunjukkan ${env.XYZ}referensi sebagai merah. Variabel diperluas dengan benar saat runtime tetapi ditampilkan sebagai merah pada waktu kompilasi. Karena itu saya memiliki pertanyaan yang sama dengan yang awalnya ditanyakan.
Djangofan

1
Ya, itu @MarkHan
djangofan

Jawaban:


216

Lihat Panduan Properti Maven ...

Seperti yang Seshagiri tunjukkan dalam komentar, ${env.VARIABLE_NAME}akan melakukan apa yang Anda inginkan.

Saya akan menambahkan satu kata peringatan dan mengatakan bahwa pom.xmlharus benar-benar menggambarkan proyek Anda jadi silakan gunakan variabel lingkungan dengan bijaksana. Jika Anda membuat bangunan Anda bergantung pada lingkungan Anda, mereka akan lebih sulit untuk diperbanyak


3
Selain itu, itu membuat platform Anda dan sistem bergantung.
lhunath

12
Be Cautions: semua karakter variable_name di pom Anda harus dalam huruf besar untuk menjadi platform independen. Karena itu hanya berlaku dalam bentuk huruf besar yang berjalan pada OS Windows. Misalnya, $ {env.M2_HOME} valid, $ {env.m2_home} tidak valid, bahkan jika Anda mendefinisikan variabel lingkungan bernama m2_home.
Jeff Liu

Saya memilikinya di properti Windows Environment (WL_HOME = c: \ apps \ Weblogic12 \ wlserver_12.1) tetapi dalam pom, ini mengembalikan nilai ini c: \ apps \ Weblogic12 \ wlserver (tanpa_12.1) ada ide di mana maven lain mungkin memilih ini naik dari?
Anand Rockzz

Baru menyadari bahwa saya mendefinisikan <wl_home> $ {WL_HOME} </wl_home> yang benar dan menggunakannya dan entah bagaimana itu disebut tanpa versi jika saya melakukannya.
Anand Rockzz

Ini berfungsi dengan baik di Windows untuk IDE & CLI. Untuk MacOS / Linux / Unix agak sulit untuk mendapatkan dukungan dari IDE di mana tidak diragukan lagi untuk Terminal , Ini berfungsi dengan baik.
Md Shahed Hossain

29

Mungkin lebih aman untuk langsung mengirimkan variabel lingkungan ke properti sistem pakar. Misalnya, katakan pada Linux Anda ingin mengakses variabel lingkungan MY_VARIABLE. Anda dapat menggunakan properti sistem dalam file pom Anda.

<properties>
    ...
    <!-- Default value for my.variable can be defined here -->
    <my.variable>foo</my.variable>
    ...
</properties>
...
<!-- Use my.variable -->
... ${my.variable} ...

Tetapkan nilai properti pada baris perintah pakar:

mvn clean package -Dmy.variable=$MY_VARIABLE

4
mengapa ini lebih aman?
weberjn

Ini tidak berfungsi untuk saya, nilai baru my.variable yang disediakan pada baris perintah tidak pernah menimpa nilai di blok <properties>. Ada ide?
Daniel Scott

Bagi saya lebih aman, atau setidaknya kurang misterius, properti b / c dapat dijelaskan dalam file properti. Namun, saya menyadari solusi saya bergantung pada kerangka Spring, yang mungkin mengapa itu tidak berhasil untuk Daniel.
EricGreg

lebih aman karena jika Anda gagal mengubah nilai melalui commandline / environment, itu masih POM yang valid dan dibangun, dari nilai di properti.
foo

20

Juga, pastikan bahwa Anda variabel lingkungan yang terdiri hanya dengan UPPER CASE HURUF .... Aku tidak tahu mengapa (dokumentasi tidak mengatakan apa-apa eksplisit tentang hal itu, setidaknya link yang diberikan oleh @ Andrew Putih), tetapi jika variabelnya adalah huruf kecil (mis. env.dummy), variabel selalu kosong atau kosong ...

Saya berjuang dengan ini seperti satu jam, sampai saya memutuskan untuk mencoba KASUS YANG BERBAGAI, dan masalah terpecahkan.

Contoh Variabel OK:

  • DUMMY
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( Catatan : saya menggunakan maven v3.0.5)

Semoga ini bisa membantu seseorang ....


5
Variabel lingkungan di unix peka huruf besar kecil dan secara tradisional diberi nama huruf besar sehingga ketika Anda melihat variabel yang diatur dalam shell Anda, Anda dapat dengan mudah membedakan mana yang ditetapkan secara lokal ke shell Anda dan yang terlihat oleh proses anak. Variabel lingkungan di Windows tampaknya tidak peka terhadap huruf besar-kecil, tetapi saya belum memverifikasi itu dari dokumentasi, hanya dari percobaan kecil di command prompt.
melegalkan

11

Tidak bisakah kita menggunakan

<properties>
    <my.variable>${env.MY_VARIABLE}</my.variable>
</properties>

Tersirat, berlawanan dengan ketika Anda mengirimkannya dengan -D yang membuatnya eksplisit dan menimpa nilai properti default, yang mungkin masih berguna untuk mensetup lingkungan konfigurasi nol (mis. Dev)
Technoshaft

1
Apakah ini berhasil? Saya sudah mencobanya dan tidak, setidaknya tidak di lingkungan saya
user26270

3

Saya berjuang dengan hal yang sama, menjalankan skrip shell yang mengatur variabel, kemudian ingin menggunakan variabel di shared-pom. Tujuannya adalah agar variabel lingkungan mengganti string dalam file proyek saya menggunakan com.google.code.maven-replacer-plugin.

Menggunakan ${env.foo} atau ${env.FOO}tidak bekerja untuk saya. Maven tidak menemukan variabel. Apa yang berhasil adalah melewatkan variabel sebagai parameter baris perintah di Maven. Ini pengaturannya:

  1. Atur variabel dalam skrip shell. Jika Anda meluncurkan Maven dalam sebuah sub-skrip, pastikan variabelnya sudah diatur, misalnya menggunakansource ./maven_script.sh untuk memanggilnya dari skrip induk.

  2. Di shared-pom, buat param baris perintah yang mengambil variabel lingkungan:

<plugin>
  ...
  <Eksekusi>
    <Eksekusi>
    ...
      <eksekusi>
      ...
        <konfigurasi>
          <param> $ {foo} </param> <! - Perhatikan ini * tidak * $ {env.foo} ->
        </configuration>
  1. Di com.google.code.maven-replacer-plugin, buat nilai penggantian ${foo}.

  2. Dalam skrip shell saya yang memanggil pakar, tambahkan ini ke perintah: -Dfoo=$foo


0

Anda dapat menggunakan <properties>tag untuk menentukan variabel dan ${variable}pola khusus untuk menggunakannya

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <!-- define -->
    <properties>
        <property.name>1.0</property.name>
    </properties>

    <!-- using -->
    <version>${property.name}</version>

</project>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.