POM.xml dosyasında ortam değişkenine nasıl başvurulur?


172

Maven'i yapı aracı olarak kullanıyorum. Adlı bir ortam değişkeni ayarladım env. Bu ortam değişkeninin pom.xmldosyadaki değerine nasıl erişebilirim ?


7
$ {env.XXXXXXXX} ile başvurabilirsiniz; burada XXXXXXXX değişken adınızdır. Örneğin $ {env.PATH}, PATH referansını verecektir.
Seshagiri

2
Ama muhtemelen yapmamalısın. Yapılarınızı ortamınıza bağımlı hale getirirseniz çoğaltılması daha zordur.
Stephen C

5
@StephenC "Olmamalı" demezdim, ama "çok dikkatli ol." Bazen bir CI ortamı ve yerel bir geliştirme ortamı farklı görünür ve ortam değişkenleri boşlukları doldurmanın bir yoludur.
Andrew White

1
Benim için IntelliJ 2019 ${env.XYZ}referansı kırmızı olarak gösteriyor . Değişken çalışma zamanında doğru şekilde genişletilir ancak derleme zamanında kırmızı olarak gösterilir. Bu nedenle, aynı soruya ilk olarak sordum.
djangofan

1
Evet, yapar @MarkHan
djangofan

Yanıtlar:


216

Maven Özellikler Rehberine göz atın ...

Seshagiri'nin yorumlarda belirttiği gibi, ${env.VARIABLE_NAME}istediğinizi yapacağız.

Bir uyarı sözü ekleyeceğim ve pom.xmla'nın projenizi tamamen tanımlaması gerektiğini söyleyeceğim, bu yüzden lütfen çevre değişkenlerini akıllıca kullanın. Yapılarınızı ortamınıza bağımlı hale getirirseniz, çoğaltılması daha zordur


3
Ayrıca, yapı platformunuzu ve sisteminizi bağımlı hale getirir.
lhunath

12
Dikkat: platformunuzda bağımsız olması için pom'nızdaki değişken_adı karakterlerinin tümü büyük harf olmalıdır. Çünkü bu sadece Windows işletim sisteminde çalışan büyük harf biçiminde geçerlidir. Örneğin, $ {env.M2_HOME} geçerlidir, $ {env.m2_home} geçersiz, m2_home adında bir ortam değişkeni tanımlamış olsanız bile.
Jeff Liu

Ben Windows Ortam özellikleri (WL_HOME = c: \ apps \ Weblogic12 \ wlserver_12.1) var ama pom, bu değeri c: \ apps \ Weblogic12 \ wlserver (olmadan_12.1) başka maven toplama olabilir herhangi bir fikir döndürmek bu kadar mı?
Anand Rockzz

Sadece düzgün bir şekilde adlandırılan <wl_home> $ {WL_HOME} </wl_home> tanımladığımı ve bunu kullandığımda bir şekilde versiyon olmadan referans verdiğimi fark ettim.
Anand Rockzz

IDE ve CLI için Windows'da iyi çalışıyor . İçin MacOS / Linux / Unix bunun için hiç şüphesiz nerede IDE desteği almak için biraz yanıltıcı olabileceğini Terminali , O cezayı çalışıyor.
Md Shahed Hossain

29

Ortam değişkenlerini doğrudan sistem özelliklerine geçirmek daha güvenli olabilir. Örneğin, Linux'ta MY_VARIABLE ortam değişkenine erişmek istediğinizi söyleyin. Pom dosyanızda bir sistem özelliği kullanabilirsiniz.

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

Maven komut satırında özellik değerini ayarlayın:

mvn clean package -Dmy.variable=$MY_VARIABLE

4
bu neden daha güvenli?
weberjn

Bu benim için çalışmıyor, komut satırında sağlanan my.variable'ın yeni değeri hiçbir zaman <properties> bloğundaki değeri geçersiz kılmaz. Herhangi bir fikir?
Daniel Scott

Bana göre daha güvenli veya en azından daha az gizemli olan b / c özellikleri bir özellikler dosyasında açıklanabilir. Ancak, çözümümün Bahar çerçevesine dayandığını fark ediyorum, bu yüzden muhtemelen Daniel için işe yaramıyor.
EricGreg

Bu değer daha güvenlidir, çünkü değeri komut satırı / ortam aracılığıyla değiştiremezseniz, yine de özelliklerdeki değerden geçerli bir POM ve derleme olur.
foo

20

Ayrıca, emin olun ortam değişkeni olan büyük harflerle sadece oluşan niye .... Bilmiyorum, ama eğer (dokümantasyon, bu konuda kesin bir şey söylemez @ Andrew White tarafından sağlanan bağlantı en azından) değişken küçük harfli bir kelimedir (ör. env.dummy), değişken her zaman boş veya null oldu ...

ÜST DURUM DEĞİŞKENİ denemeye karar verene kadar bir saat gibi uğraşıyordum ve sorun çözüldü.

Tamam Değişkenler Örnekler:

  • YAPAY
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( NOT : maven v3.0.5 kullanıyordum)

Umarım bu birine yardımcı olabilir ....


5
Unix'teki ortam değişkenleri büyük / küçük harfe duyarlıdır ve geleneksel olarak büyük harf adları verilir; Windows'taki ortam değişkenleri büyük / küçük harfe duyarlı görünmüyor, ancak bunu yalnızca komut istemindeki küçük bir denemeden belgelerden doğrulamamıştım.
yasallaştırmak

11

Kullanamaz mıyız

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

Açık bir yapılandırma ortamı (örn. Dev) ayarlamak için hala yararlı olabilecek varsayılan özellik değerini geçersiz kılan bir -D ile geçirdiğinizde bunun üstü örtülü olarak
Technoshaft

1
Bu çalışıyor mu? Denedim ve en azından
çevremde

3

Aynı şeyle uğraşıyordum, değişkenleri belirleyen bir kabuk betiği çalıştırıyordum, sonra da paylaşılan pom'daki değişkenleri kullanmak istiyordum. Amaç, ortam değişkenlerinin com.google.code.maven-replacer-plugin kullanarak proje dosyalarımdaki dizeleri değiştirmesini sağlamaktı.

Kullanmak ${env.foo}ya ${env.FOO}da benim için çalışmadı. Maven değişkeni bulamıyordu. İşe yarayan, Maven'de bir komut satırı parametresi olarak değişkeni aktarmaktı. Kurulum şu şekildedir:

  1. Değişkeni kabuk komut dosyasında ayarlayın. Maven'i bir alt komut dosyasında çalıştırıyorsanız, değişkenin ayarlandığından emin olun, örneğin source ./maven_script.shüst komut dosyasından çağırmak için kullanma .

  2. Paylaşılan pom'da, ortam değişkenini alan bir komut satırı parametresi oluşturun:

<Eklentisi>
  ...
  <İnfaz>
    <İnfaz>
    ...
      <Yürütme>
      ...
        <Yapılandırma>
          <param> $ {foo} </param> <! - Bunun * değil * $ {env.foo} -> olduğuna dikkat edin
        </ Configuration>
  1. Com.google.code.maven-replacer-plugin'de değiştirme değerini yapın ${foo}.

  2. Maven'i çağıran benim kabuk betiğimde, şu komuta ekleyin: -Dfoo=$foo


0

<properties>Özel bir değişkeni tanımlamak için etiketi ${variable}kullanabilirsiniz.

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