POM.xml এ পরিবেশের পরিবর্তনশীল কীভাবে উল্লেখ করবেন?


172

আমি মেকেনকে বিল্ড টুল হিসাবে ব্যবহার করছি। আমি একটি এনভায়রনমেন্ট ভেরিয়েবল সেট করেছি env। আমি কীভাবে এই পরিবেশে ভেরিয়েবলের মানটিতে অ্যাক্সেস পেতে পারি pom.xml?


7
আপনি এটিকে $ v env.XXXXXXXXX refer সহ উল্লেখ করতে পারেন যেখানে XXXXXXXX আপনার পরিবর্তনশীল নাম। উদাহরণস্বরূপ $ v env.PATH P PATH রেফারেন্স দেবে।
শেশেগিরি

2
তবে আপনার সম্ভবত করা উচিত নয়। আপনি যদি নিজের বিল্ডগুলি আপনার পরিবেশের উপর নির্ভরশীল করে তোলেন তবে এগুলি পুনরুত্পাদন করা আরও শক্ত।
স্টিফেন সি

5
@ স্টেফেনসি আমি "উচিত নয়" বলব না, তবে "খুব সাবধানতা অবলম্বন করুন"। কখনও কখনও একটি সিআই এনভায়রনমেন্ট এবং স্থানীয় দেব পরিবেশ আলাদা দেখায় এবং পরিবেশের ভেরিয়েবলগুলি শূন্যস্থান পূরণ করার একটি উপায়।
অ্যান্ড্রু হোয়াইট

1
আমার জন্য, IntelliJ 2019 ${env.XYZ}রেফারেন্সটিকে লাল হিসাবে দেখায় । চলকটি সঠিকভাবে রানটাইমে প্রসারিত হলেও সংকলনের সময় লাল হিসাবে প্রদর্শিত হচ্ছে। আমার তাই একই প্রশ্ন যা মূলত জিজ্ঞাসা করা হয়েছিল।
jangofan

1
হ্যাঁ, এটি @ মারকহান করে
জঙ্গোফান

উত্তর:


216

পরীক্ষা করে দেখুন ম্যাভেন প্রোপার্টি গাইড ...

শেশাগিরি মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, ${env.VARIABLE_NAME}আপনি যা চান তাই করবেন।

আমি একটি সতর্কতার শব্দ যুক্ত করব এবং বলব যে pom.xmlআপনার প্রকল্পের সম্পূর্ণ বিবরণ দেওয়া উচিত তাই দয়া করে পরিবেশের পরিবর্তনগুলি যথাযথভাবে ব্যবহার করুন। আপনি যদি নিজের বিল্ডগুলি আপনার পরিবেশের উপর নির্ভরশীল করে তোলেন তবে এগুলি পুনরুত্পাদন করা আরও শক্ত


3
এছাড়াও, এটি আপনার বিল্ড প্ল্যাটফর্ম- এবং সিস্টেম-নির্ভর করে তোলে।
lhunath

12
সতর্কতা অবলম্বন করুন: প্ল্যাটফর্মটি স্বতন্ত্র হওয়ার জন্য আপনার পমের ভেরিয়েবল_নামের সমস্ত অক্ষর অবশ্যই বড় হাতের হতে হবে। কারণ এটি কেবল উইন্ডোজ ওএসে চলমান আপার কেস ফর্মেই বৈধ। উদাহরণস্বরূপ, 2 {env.M2_Home valid বৈধ, m {env.m2_home invalid অবৈধ, এমনকি আপনি যদি এম 2_home নামের পরিবেশগত পরিবর্তনশীল নির্ধারণ করেন।
জেফ লিউ

উইন্ডোজ এনভায়রনমেন্ট বৈশিষ্ট্যগুলিতে এটি আমার কাছে রয়েছে (ডাব্লুএলহোম = সি: \ অ্যাপস \ ওয়েবলজিক 12 \ wlserver_12.1) তবে পোমে, এটি এই মানটি সি: \ অ্যাপস \ ওয়েবলোগিক 12 \ উইলসারভার (ব্যতীত_12.1) ফিরিয়ে দেবে যেখানে মাভেন অন্য কোনটি বেছে নিতে পারে এই থেকে?
আনন্দ রকজ ২

কেবল বুঝতে পেরেছি যে আমি <ডাব্লুএলএল_হোম> called {ডাব্লুএলহোম} </wl_home> নামক একটি সঠিকভাবে সংজ্ঞায়িত করছি এবং এটি ব্যবহার করছি এবং যদি আমি এটি করি তবে এটি কোনওরকম সংস্করণ ছাড়াই উল্লেখ করা হয়েছে।
আনন্দ রকজ্জ

উইন্ডোজ আইডিই এবং সিএলআই এর জন্য এটি দুর্দান্ত কাজ করছে । জন্য MacOS এর / লিনাক্স / ইউনিক্স এটা আইডিই সহায়তায় পেয়ে যেখানে জন্য কোন সন্দেহ জন্য সামান্য বিট কৌশলী টার্মিনাল , এটি সূক্ষ্ম কাজ করা হচ্ছে।
মোঃ শাহেদ হোসেন

29

ম্যাভেন সিস্টেমের বৈশিষ্ট্যগুলিতে সরাসরি পরিবেশের পরিবর্তনগুলি পাস করা নিরাপদ হতে পারে। উদাহরণস্বরূপ, লিনাক্সে বলুন আপনি পরিবেশের পরিবর্তনশীল MY_VARIABLE অ্যাক্সেস করতে চান। আপনি আপনার পোম ফাইলে একটি সিস্টেম সম্পত্তি ব্যবহার করতে পারেন।

<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 এর নতুন মান কখনই <properties> ব্লকের মানকে ওভাররাইড করে না। কোন ধারনা?
ড্যানিয়েল স্কট

আমার কাছে আরও নিরাপদ, বা কমপক্ষে রহস্যজনক, বি / সি বৈশিষ্ট্য একটি বৈশিষ্ট্য ফাইলে বর্ণনা করা যেতে পারে। তবে আমি বুঝতে পারি যে আমার সমাধানটি বসন্তের কাঠামোর উপর নির্ভর করে, সম্ভবত এটি কারণেই এটি ড্যানিয়েলের পক্ষে কাজ করে না।
এরিক গ্রেগ

এটি নিরাপদ কারণ আপনি যদি কমান্ডলাইন / পরিবেশের মাধ্যমে মানটি পরিবর্তন করতে ব্যর্থ হন তবে এটি বৈশিষ্ট্যের মান থেকে এখনও একটি বৈধ POM এবং বিল্ড।
foo

20

এছাড়াও, নিশ্চিত করুন যে আপনার করা এনভায়রনমেন্ট ভেরিয়েবল হয় শুধুমাত্র বড় হাতের অক্ষর দ্বারা গঠিত .... আমি জানি না কেন, কিন্তু যদি (ডকুমেন্টেশন এটি সম্পর্কে স্পষ্ট কিছুই বলে না, অন্তত @Andrew হোয়াইট দ্বারা উপলব্ধ লিঙ্ক-এ) ভেরিয়েবল হ'ল লোয়ার কেস শব্দ (যেমন env.dummy), চলকটি সর্বদা খালি বা নাল হয়ে আসে ...

আমি এক ঘন্টাের মতো লড়াই করে যাচ্ছিলাম, যতক্ষণ না আমি কোনও আপপার কেস ভার্চিয়াল চেষ্টা করার এবং সমস্যা সমাধানের সিদ্ধান্ত না নিই।

ওকে ভেরিয়েবলের উদাহরণ:

  • পুতুল
  • DUMMY_ONE
  • JBOSS_SERVER_PATH

( দ্রষ্টব্য : আমি maven v3.0.5 ব্যবহার করছিলাম)

আমি আশা করি এটি কারও সাহায্য করতে পারে ....


5
ইউনিক্সে পরিবেশগত ভেরিয়েবলগুলি কেস সংবেদনশীল এবং traditionতিহ্যগতভাবে উপরের কেসের নাম দেওয়া হয় যাতে আপনি যখন নিজের শেলের মধ্যে থাকা ভেরিয়েবলগুলি দেখেন, আপনি সহজেই আলাদা করতে পারবেন যা আপনার শেলের সাথে স্থানীয়ভাবে সেট করা আছে এবং যা শিশু প্রক্রিয়াগুলিতে দৃশ্যমান। উইন্ডোজের পরিবেশগত ভেরিয়েবলগুলি কেস সংবেদনশীল বলে মনে হয় না, তবে আমি ডকুমেন্টেশন থেকে কেবল কমান্ড প্রম্পটে একটি ছোট পরীক্ষা থেকে এটি যাচাই করেছিলাম না।
বৈধকরণ করুন

11

আমরা ব্যবহার করতে পারি না

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

এর অন্তর্নিহিত, যখন আপনি এটি -D দিয়ে পাস করার বিপরীতে থাকেন যা এটি স্পষ্ট করে তোলে এবং ডিফল্ট সম্পত্তি মানটিকে ওভাররাইড করে, যা শূন্য কনফিগারেশন পরিবেশ (উদাহরণস্বরূপ দেব) সেটআপ করার জন্য এখনও কার্যকর হতে পারে
টেকনোসফ্ট

1
এটা কি কাজ করে? আমি চেষ্টা করেছি এবং এটি আমার পরিবেশে কমপক্ষে নয়
user26270

3

আমি একই জিনিসটির সাথে লড়াই করছিলাম, একটি শেল স্ক্রিপ্ট চালিয়ে যা ভেরিয়েবলগুলি সেট করে, তারপরে ভাগ করা-পমের মধ্যে ভেরিয়েবলগুলি ব্যবহার করতে চাই। লক্ষ্যটি ছিল আমার প্রকল্পের ফাইলগুলিতে com.google.code.maven-replacer-પ્લગઇન ব্যবহার করে পরিবেশের পরিবর্তনশীল স্ট্রিংগুলি প্রতিস্থাপন করা ছিল।

ব্যবহার ${env.foo}বা ${env.FOO}আমার জন্য কাজ করে না। মাভেন কেবল চলকটি খুঁজে পাচ্ছিল না। যা কাজ করেছিল তা মাভেনের কমান্ড-লাইন প্যারামিটার হিসাবে চলকটি অতিক্রম করছিল। এখানে সেটআপ দেওয়া আছে:

  1. শেল স্ক্রিপ্টে ভেরিয়েবল সেট করুন। আপনি যদি সাব-স্ক্রিপ্টে মাভেন চালু করছেন তবে নিশ্চিত করুন যে চলকটি সেট হয়ে যাচ্ছে, যেমন source ./maven_script.shপ্যারেন্ট স্ক্রিপ্ট থেকে এটি কল করার জন্য।

  2. শেয়ারড-পম এ, একটি কমান্ড-লাইন প্যারাম তৈরি করুন যা পরিবেশের পরিবর্তনশীলকে ধরে ফেলবে:

<প্লাগইন>
  ...
  <মৃত্যুদণ্ড কার্যকর>
    <মৃত্যুদণ্ড কার্যকর>
    ...
      <ফাঁসি>
      ...
        <কনফিগারেশন>
          <param> $ {foo} </param> <! - দ্রষ্টব্য এটি * নয় * $ v env.foo} ->
        </ কনফিগারেশন>
  1. Com.google.code.maven-replacer- প্লাগইনে, প্রতিস্থাপনের মানটি তৈরি করুন ${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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.