POM.xml में पर्यावरण चर को कैसे देखें?


172

मैं निर्माण उपकरण के रूप में मावेन का उपयोग कर रहा हूं। मैंने एक पर्यावरण चर नामक सेट किया है env। मैं pom.xmlफ़ाइल में इस पर्यावरण चर के मूल्य तक कैसे पहुंच सकता हूं ?


7
आप इसे $ {env.XXXXXXXX} के साथ संदर्भित कर सकते हैं जहां XXXXXXXX आपका चर नाम है। उदाहरण के लिए $ {env.PATH} PATH संदर्भ देगा।
शेषगिरी

2
लेकिन आप शायद नहीं करना चाहिए। यदि आप अपने निर्माण को अपने पर्यावरण पर निर्भर करते हैं, तो वे पुन: पेश करने के लिए कठिन हैं।
स्टीफन सी

5
@StephenC मैं नहीं कहूंगा "नहीं", लेकिन "बहुत सावधान रहना चाहिए।" कभी-कभी एक सीआई वातावरण और एक स्थानीय देव वातावरण अलग दिखता है और पर्यावरण चर अंतराल को भरने का एक तरीका है।
एंड्रयू व्हाइट

1
मेरे लिए, IntelliJ 2019 ${env.XYZ}लाल के रूप में संदर्भ दिखाता है । चर को सही ढंग से रनटाइम पर विस्तारित किया जाता है, लेकिन संकलन समय पर लाल दिखाया जाता है। इसलिए मेरा वही सवाल है जो मूल रूप से पूछा गया था।
djangofan

1
हां, यह @MarkHan
djangofan

जवाबों:


216

की जाँच करें Maven गुण गाइड ...

जैसा कि शेषगिरि ने टिप्पणियों में बताया है, ${env.VARIABLE_NAME}आप जो चाहते हैं वह करेंगे।

मैं चेतावनी का एक शब्द जोड़ूंगा और कहूंगा कि pom.xmlअपनी परियोजना का पूरी तरह से वर्णन करना चाहिए ताकि कृपया पर्यावरण चर का उपयोग विवेकपूर्ण तरीके से करें। यदि आप अपने निर्माण को अपने पर्यावरण पर निर्भर करते हैं, तो वे पुन: पेश करने के लिए कठिन हैं


3
इसके अलावा, यह आपके बिल्ड प्लेटफॉर्म- और सिस्टम-डिपेंडेंट पर निर्भर करता है।
लहुनाथ

12
सावधान रहें: आपके pom में variable_name के सभी वर्ण स्वतंत्र होने के लिए ऊपरी मामला होना चाहिए। क्योंकि यह केवल विंडोज़ ओएस पर चलने वाले ऊपरी केस फॉर्म में मान्य है। उदाहरण के लिए, $ {env.M2_HOME} मान्य है, $ {env.m2_home} अमान्य है, भले ही आपने m2_home नामक पर्यावरण चर को परिभाषित किया हो।
जेफ लियू

मेरे पास यह Windows पर्यावरण गुण (WL_HOME = c: \ apps \ Weblogic12 \ wlserver_12.1) है, लेकिन pom में, यह इस मान को लौटाता है c: \ apps \ Weblogic12 \ wlserver (without12.1) कोई भी विचार जहां मावेन उठा सकता है। इस से?
आनंद रॉकज

बस एहसास हुआ कि मैं एक ठीक से परिभाषित कर रहा था जिसे <wl_home> $ {WL_HOME} </ wl_home> कहा गया था और उस का उपयोग करते हुए और किसी तरह इसे संस्करण के बिना संदर्भित किया यदि मैं ऐसा करता हूं।
आनंद रॉकज

यह IDE & CLI के लिए विंडोज में ठीक काम कर रहा है । के लिए MacOS / लिनक्स / यूनिक्स यह आईडीई से समर्थन मिल रहा है जहां के लिए कोई संदेह नहीं है के लिए छोटा सा मुश्किल है टर्मिनल , यह ठीक काम कर रहा है।
एमडी शाहिद हुसैन

29

यह सिस्टम प्रॉपर्टीज को मावेन करने के लिए पर्यावरण चर को सीधे पास करना सुरक्षित हो सकता है। उदाहरण के लिए, लिनक्स पर कहें कि आप पर्यावरण चर MY_VARIABLE का उपयोग करना चाहते हैं। आप अपने pom फ़ाइल में सिस्टम गुण का उपयोग कर सकते हैं।

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

प्रॉपर्टी वैल्यू को मावेन कमांड लाइन पर सेट करें:

mvn clean package -Dmy.variable=$MY_VARIABLE

4
यह सुरक्षित क्यों है?
वेबरनज

यह मेरे लिए काम नहीं कर रहा है, कमांड लाइन पर प्रदान की गई my.variable का नया मूल्य कभी भी <गुण> ब्लॉक में मूल्य को ओवरराइड नहीं करता है। कोई विचार?
डैनियल स्कॉट

मुझे सुरक्षित करने के लिए, या कम से कम रहस्यमय तरीके से, बी / सी गुणों को एक गुण फ़ाइल में वर्णित किया जा सकता है। हालांकि, मुझे लगता है कि मेरा समाधान स्प्रिंग फ्रेमवर्क पर निर्भर करता है, शायद यही कारण है कि यह डैनियल के लिए काम नहीं करता है।
एरिकग्राम

यह सुरक्षित है क्योंकि यदि आप कमांडलाइन / पर्यावरण के माध्यम से मूल्य को बदलने में विफल रहते हैं, तो यह अभी भी गुणों में मूल्य से एक मान्य पीओएम और बिल्ड है।
फू

20

इसके अलावा, सुनिश्चित करें कि आपके बनाने के वातावरण चर रहा है केवल अपर केस वाले अक्षर द्वारा रचित .... मैं नहीं जानता कि क्यों, लेकिन अगर (प्रलेखन इसके बारे में स्पष्ट कुछ भी नहीं कहना नहीं है, कम से कम @Andrew व्हाइट द्वारा प्रदान किए गए लिंक पर) चर एक निचला मामला शब्द है (उदाहरण के लिए env.dummy), चर हमेशा खाली या अशक्त आया ...

मैं इस तरह से एक घंटे से जूझ रहा था, जब तक कि मैंने UPPER CASE VARIABLE का प्रयास नहीं किया, और समस्या हल हो गई।

ठीक चर उदाहरण:

  • डमी
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( नोट : मैं maven v3.0.5 का उपयोग कर रहा था)

मुझे उम्मीद है कि यह किसी की मदद कर सकता है ...।


5
यूनिक्स में पर्यावरण चर मामले संवेदनशील होते हैं और पारंपरिक रूप से ऊपरी मामले नाम दिए जाते हैं ताकि जब आप अपने शेल में सेट किए गए चर को देखें, तो आप आसानी से भेद कर सकें जो आपके शेल में स्थानीय रूप से सेट हैं और जो बच्चे की प्रक्रियाओं के लिए दृश्यमान हैं। विंडोज में पर्यावरण चर मामले के प्रति संवेदनशील नहीं दिखाई देते हैं, लेकिन मैंने यह सत्यापित नहीं किया है कि केवल कमांड प्रॉम्प्ट पर एक छोटे से प्रयोग से, प्रलेखन से।
वैध

11

हम उपयोग नहीं कर सकते

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

इसका निहितार्थ, जब आप इसे -D के साथ पास करते हैं, तो यह स्पष्ट हो जाता है और डिफ़ॉल्ट गुण मान को अधिरोहित करता है, जो अभी भी शून्य कॉन्फ़िगरेशन वातावरण (जैसे देव)
Technoshaft

1
क्या यह काम करता है? मैंने इसे आज़माया है और यह कम से कम मेरे परिवेश में नहीं है
user26270

3

मैं एक ही चीज़ से जूझ रहा था, एक शेल स्क्रिप्ट चला रहा था जो चर सेट करता था, फिर साझा-पोम में चर का उपयोग करना चाहता था। लक्ष्य यह था कि मेरी परियोजना फाइलों में com.google.code.maven-replacer-plugin का उपयोग करके पर्यावरण चर को स्ट्रिंग में बदल दिया जाए।

उपयोग करना ${env.foo}या ${env.FOO}मेरे लिए काम नहीं किया। मावेन अभी चर नहीं पा रहा था। मावेन में कमांड-लाइन पैरामीटर के रूप में चर ने क्या काम किया। यहाँ सेटअप है:

  1. शेल स्क्रिप्ट में चर सेट करें। यदि आप मावेन को एक उप-स्क्रिप्ट में लॉन्च कर रहे हैं, तो सुनिश्चित करें कि चर सेट हो रहा है, उदाहरण के source ./maven_script.shलिए इसे मूल स्क्रिप्ट से कॉल करने के लिए।

  2. साझा-पोम में, एक कमांड-लाइन परम बनाएं जो पर्यावरण चर को पकड़ता है:

<प्लगइन>
  ...
  <फांसी>
    <फांसी>
    ...
      <निष्पादन>
      ...
        <विन्यास>
          <param> $ {foo} </ param> <! - ध्यान दें यह * नहीं * $ {env.foo}> है
        </ विन्यास>
  1. Com.google.code.maven-replacer-plugin में, प्रतिस्थापन मूल्य बनाएं ${foo}

  2. मेरे शेल स्क्रिप्ट में, जो मैवेन को कॉल करता है, इसे कमांड में जोड़ें: -Dfoo=$foo


0

आप इसका उपयोग <properties>करने के लिए कस्टम चर और ${variable}पैटर्न को परिभाषित करने के लिए टैग का उपयोग कर सकते हैं

<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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.