আমি মাভেনকে নির্ভরতার সর্বশেষতম সংস্করণটি ব্যবহার করতে কীভাবে বলব?


788

মাভেনে, নির্ভরতা সাধারণত এইভাবে সেট আপ করা হয়:

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

এখন, আপনি যদি প্রায়শই প্রকাশিত লাইব্রেরিগুলির সাথে কাজ করছেন তবে <version> ট্যাগটি নিয়মিত আপডেট করা কিছুটা বিরক্তিকর হতে পারে। মাভেনকে সর্বদা সর্বশেষতম উপলভ্য সংস্করণটি ব্যবহার করতে বলার কোনও উপায় আছে (সংগ্রহশালা থেকে)?


@ মার্টিন আমি জাইজেড-এসএনএপএসএইচটি কনভেনশন সম্পর্কে সচেতন, তবে আমি চূড়ান্ত সংস্করণগুলিতে ভান্ডারগুলিতে প্রকাশিত লাইব্রেরি সম্পর্কে চিন্তা করছিলাম (যেমন স্বপ্ন-গ্রন্থাগার -১.২.৩.জার থেকে স্বপ্ন-গ্রন্থাগার -২.২.২.২০) , এবং তাই)।
Anders Sandvig

176
পুনরুত্পাদনযোগ্যতার জন্য আমি সত্যিই এই অনুশীলনের (সংস্করণ ব্যাপ্তি ব্যবহার করে) সুপারিশ করি না। এমন একটি বিল্ড যা হঠাৎ কোনও অজানা কারণে ব্যর্থ হতে শুরু করে সেটি ম্যানুয়ালি কোনও সংস্করণ নম্বর আপডেট করার চেয়ে বেশি বিরক্তিকর।
পাস্কাল থিভেন্ট

12
@ প্যাসাল থিভেন্ট ম্যানুয়ালি একটি পম এ একটি রিলিজ নম্বর আপডেট করা যদি আপনি ক্রমাগত প্রকাশ করেন তবে ব্যথা হয় a আমি এটি পাস করার জন্য scm প্লাগইনের সাথে মিলিত সংস্করণ প্লাগইন ব্যবহার করি (আমার উত্তর দেখুন)।
অ্যাডাম জেন্ট

4
@ প্যাসিকাল টিভেন্ট দুটিই বিরক্তিকর, তবে অন্যভাবে way আমি আমার পরিস্থিতির উপর নির্ভরশীল উভয়ের মধ্যেই বেছে নিতে চাই এবং সেটিকে ব্যবহার করতে বাধ্য করা হবে না কারণ অন্য কেউ সিদ্ধান্ত নিয়েছে যে এটি আরও ভাল হবে।
পাইগেমস

উত্তর:


744

বিঃদ্রঃ:

এই উত্তরটি কেবল মাভেন 2 এর জন্য প্রযোজ্য! উল্লিখিত LATESTএবং RELEASEমেটাভার্সনগুলি 6 বছর আগে "পুনরুত্পাদনযোগ্য বিল্ডগুলির জন্য" ম্যাভেন 3 এ বাদ দেওয়া হয়েছে । দয়া করে এই ম্যাভেন 3 অনুগত সমাধানটি দেখুন


আপনি যদি সর্বদা নতুন সংস্করণটি ব্যবহার করতে চান তবে মাভেনের দুটি কীওয়ার্ড রয়েছে যা আপনি সংস্করণ সীমার বিকল্প হিসাবে ব্যবহার করতে পারেন। আপনি যে প্লাগিনগুলি / নির্ভরতাগুলি ব্যবহার করছেন সেটি আর নিয়ন্ত্রণে না থাকায় আপনার এই বিকল্পগুলি যত্ন সহকারে ব্যবহার করা উচিত।

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

দেখুন ম্যাভেন বইয়ের খুলুন POM সিনট্যাক্স অধ্যায় আরো বিস্তারিত জানার জন্য। অথবা নির্ভরতা সংস্করণ রেঞ্জের এই দস্তাবেজটি দেখুন , যেখানে:

  • একটি বর্গাকার বন্ধনী ( [& ]) অর্থ "বদ্ধ" (অন্তর্ভুক্ত)।
  • একটি প্রথম বন্ধনী ( (& )) অর্থ "উন্মুক্ত" (একচেটিয়া)।

বিভিন্ন বিকল্পের চিত্র তুলে ধরে এখানে একটি উদাহরণ দেওয়া আছে। ম্যাভেনের সংগ্রহস্থলে, com.foo:my-foo এর নিম্নলিখিত মেটাডেটা রয়েছে:

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

যদি সেই শৈল্পিকের উপর নির্ভরতা প্রয়োজন হয়, আপনার নিম্নলিখিত বিকল্পগুলি রয়েছে (অন্যান্য সংস্করণ সীমা অবশ্যই নির্দিষ্ট করা যেতে পারে, কেবল এখানে প্রাসঙ্গিক দেখিয়ে):

একটি সঠিক সংস্করণ ঘোষণা করুন (সর্বদা 1.0.1 এ সমাধান হবে):

<version>[1.0.1]</version>

একটি সুস্পষ্ট সংস্করণ ঘোষণা করুন (কোনও সংঘর্ষ না হলে সর্বদা 1.0.1 এ সমাধান হবে, যখন মাভেন একটি ম্যাচিং সংস্করণ নির্বাচন করবে):

<version>1.0.1</version>

সমস্ত 1.x এর জন্য একটি সংস্করণ পরিসীমা ঘোষণা করুন (বর্তমানে 1.1.1 এ সমাধান হবে):

<version>[1.0.0,2.0.0)</version>

একটি মুক্ত-সমাপ্ত সংস্করণ পরিসীমা ঘোষণা করুন (2.0.0 এ সমাধান হবে):

<version>[1.0.0,)</version>

সংস্করণটি সর্বশেষ হিসাবে ঘোষণা করুন (২.০.০ এ সমাধান হবে) (ম্যাভেন ৩.x থেকে সরানো)

<version>LATEST</version>

সংস্করণটিকে রিলিজ হিসাবে ঘোষণা করুন (1.1.1 এ সমাধান হবে) (ম্যাভেন 3.x থেকে সরানো):

<version>RELEASE</version>

নোট করুন যে ডিফল্টরূপে আপনার নিজস্ব মোতায়েনগুলি ম্যাভেন মেটাডেটাতে "সর্বশেষ" এন্ট্রি আপডেট করবে, তবে "রিলিজ" এন্ট্রি আপডেট করতে আপনাকে ম্যাভেন সুপার পিওএম থেকে "রিলিজ-প্রোফাইল" সক্রিয় করতে হবে । আপনি এটি "-প্রিলেজ-প্রোফাইল" বা "-ড্পারফর্মরেজি = সত্য" এর মাধ্যমে করতে পারেন


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

রিলিজগুলিতে সঠিক সংস্করণগুলি সংজ্ঞায়িত করা সাধারণত একটি ভাল ধারণা। টিমের উত্তরটি যেমন উল্লেখ করেছে, মভেন-সংস্করণ-প্লাগইন নির্ভরতা সংস্করণগুলি, বিশেষত সংস্করণগুলি: আপডেট -সর্বশেষ সংস্করণ এবং সংস্করণগুলি: ব্যবহার-সর্বশেষ-প্রকাশের লক্ষ্যগুলি আপডেট করার জন্য একটি সহজ সরঞ্জাম ।


76
হাই ধনী! এটি প্রদর্শিত হয় এবং প্রকাশিত সংস্করণ চিহ্নিতকারীগুলি ম্যাভেন 3.x এ আর সমর্থিত নয়
পাস্কেল থিভেন্ট

16
এই হ্রাসটি কেবলমাত্র ডকুমেন্টটি সঠিকভাবে বুঝতে
পারলে

9
@ রিচসেলার আমি মাভেন 3.0.০ এ আর উপলভ্য না হওয়ার আগে আমি এটির জন্য কিছুটা সময় ব্যয় করেছি;) আপনি কি উত্তরটি সম্পাদনা করার বিষয়টি বিবেচনা করবেন তাই এটি ম্যাভেন 3.0.০ অবচয়কে উল্লেখ করে একটি আপডেট দিয়ে শুরু হয়? একটি গুচ্ছ ধন্যবাদ!
মিকেল

6
আমি বিশ্বাস করি যে একটি বড় ভারসাম্য হ'ল প্রধান সংস্করণটি লক করা হবে তবে সর্বশেষতম গৌণ (বা প্যাচ) সংস্করণটি পাবেন (যেটি কেবল আপনি যে নির্ভরযোগ্য আর্টিক্যাটটিতে বাগ-ফিক্সের জন্য ব্যবহৃত হয়)। বর্তমান সিনট্যাক্সের সাহায্যে এটি কেবলমাত্র এর মতো পরিসরের মাধ্যমেই সম্ভব বলে মনে হয় (দ্রষ্টব্য: বন্ধনী দিয়ে শুরু হয় এবং প্যারেন্স দিয়ে শেষ হয়):[1.1,2.0)
আমর মোস্তফা

2
এফডাব্লুআইডাব্লু ... ম্যাভেন 3 সামঞ্জস্যতার নোটগুলিতে আপডেট হওয়া লিঙ্ক: cwiki.apache.org/confluence/display/MAVEN/…
ডায়োডজি

383

এখন আমি জানি যে এই বিষয়টি পুরানো, তবে প্রশ্নটি পড়ে এবং ওপি সরবরাহিত উত্তরটি দেখে মনে হয় যে ম্যাভেন ভার্সন প্লাগইন সম্ভবত তার প্রশ্নের উত্তম উত্তর হতে পারে:

বিশেষত নিম্নলিখিত লক্ষ্যগুলি কার্যকর হতে পারে:

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

নিম্নলিখিত অন্যান্য লক্ষ্যগুলিও সরবরাহ করা হয়েছে:

  • সংস্করণ: প্রদর্শন-নির্ভরতা-আপডেটগুলি কোনও প্রকল্পের নির্ভরতাগুলি স্ক্যান করে এবং সেই নির্ভরতাগুলির একটি প্রতিবেদন তৈরি করে যার নতুন সংস্করণ উপলব্ধ available
  • সংস্করণ: ডিসপ্লে-প্লাগইন-আপডেটগুলি কোনও প্রকল্পের প্লাগইনগুলি স্ক্যান করে এবং সেই প্লাগইনগুলির একটি প্রতিবেদন তৈরি করে যার নতুন সংস্করণ উপলব্ধ।
  • সংস্করণ: আপডেট-পিতা-মাতার কোনও প্রকল্পের মূল বিভাগ আপডেট করে যাতে এটি সর্বাধিক উপলভ্য সংস্করণটিকে উল্লেখ করে। উদাহরণস্বরূপ, আপনি যদি কর্পোরেট রুট পিওএম ব্যবহার করেন, আপনি কর্পোরেট রুট পিওএমের সর্বশেষতম সংস্করণ ব্যবহার করছেন কিনা তা নিশ্চিত করার প্রয়োজন হলে এই লক্ষ্যটি সহায়ক হতে পারে।
  • সংস্করণ: আপডেট-চাইল্ড-মডিউলগুলি কোনও প্রকল্পের চাইল্ড মডিউলগুলির পিতামাতার বিভাগ আপডেট করে যাতে সংস্করণটি বর্তমান প্রকল্পের সংস্করণের সাথে মেলে। উদাহরণস্বরূপ, যদি আপনার যদি একটি অ্যাগ্রিগেটর পম থাকে যা প্রকল্পগুলিও এটি একত্রিত করে এবং তাদের জন্য শিশু এবং পিতামাতার সংস্করণগুলি সিঙ্কের বাইরে চলে যায় তবে এই মোজো শিশু মডিউলগুলির সংস্করণগুলি ঠিক করতে সহায়তা করতে পারে। (দ্রষ্টব্য, আপনার প্রকল্পটি যদি এত খারাপভাবে ভেঙে যায় যে সংস্করণটির ভুল মিলের কারণে এটি তৈরি করতে না পারে তবে এই লক্ষ্যটি চালানোর জন্য আপনাকে মাভেনকে -N বিকল্পের সাথে আহ্বান করতে হবে)।
  • সংস্করণগুলি: লক-স্ন্যাপশটগুলি সমস্ত -NNPSHOT সংস্করণগুলির জন্য পম অনুসন্ধান করে এবং সেগুলি -SNAPSHOT এর বর্তমান টাইমস্ট্যাম্প সংস্করণে প্রতিস্থাপন করে, যেমন -20090327.172306-4
  • সংস্করণ: আনলক-স্ন্যাপশটগুলি সমস্ত টাইমস্ট্যাম্প লকড স্ন্যাপশট সংস্করণগুলির জন্য পম অনুসন্ধান করে এবং তাদের -SNAPSHOT এর সাথে প্রতিস্থাপন করে।
  • সংস্করণ: সমাধান-রেঞ্জগুলি সংস্করণ ব্যাপ্তিগুলি ব্যবহার করে নির্ভরতা সন্ধান করে এবং ব্যবহৃত নির্দিষ্ট সংস্করণটির ব্যাপ্তিটি সমাধান করে।
  • সংস্করণ: ইউজ-রিলিজ সমস্ত -SNAPSHOT সংস্করণ প্রকাশিত pom অনুসন্ধান করে যা তাদের প্রকাশিত সংস্করণের সাথে প্রতিস্থাপন করে।
  • সংস্করণ: ইউজ-নেক্সট-রিলিজগুলি সমস্ত নন-এসএনএপিএসএইচটি সংস্করণগুলির জন্য পম অনুসন্ধান করে যা একটি নতুন রিলিজ হয়েছে এবং তাদের পরবর্তী সংস্করণে প্রতিস্থাপন করে।
  • সংস্করণ: ব্যবহার-পরবর্তী-সংস্করণগুলি সমস্ত সংস্করণের জন্য পম অনুসন্ধান করে যা একটি নতুন সংস্করণ হয়ে থাকে এবং সেগুলি পরবর্তী সংস্করণে প্রতিস্থাপন করে।
  • সংস্করণ: কমিট pom.xML.versionsBackup ফাইলগুলি সরিয়ে দেয়। অন্তর্নির্মিত "দরিদ্র মানুষের এসসিএম" এর অর্ধেকটি ফর্ম করে।
  • সংস্করণগুলি: রিটার্ভ pom.xML.versionsBackup ফাইলগুলি থেকে pom.xML ফাইলগুলি পুনরুদ্ধার করে। অন্তর্নির্মিত "দরিদ্র মানুষের এসসিএম" এর অর্ধেকটি ফর্ম করে।

ভেবেছি ভবিষ্যতের কোনও রেফারেন্সের জন্য আমি এটি অন্তর্ভুক্ত করব।


10
এই প্রসঙ্গে, "মুক্তি" এবং "সংস্করণ" এর মধ্যে পার্থক্য কী what's
বেন নোল্যান্ড

1
@ বেননোল্যান্ড, আমি বিশ্বাস করি যে এই ক্ষেত্রে পার্থক্যটি হ'ল পরবর্তী সংস্করণটি একটি রিলিজ আর্টফ্যাক্টের প্রয়োজন হতে পারে না। উদাহরণস্বরূপ, 1.0.0-SNAPSHOT, 1.0.0, এবং 1.0.1-SNAPSHOT সংস্করণ হিসাবে একটি আর্টিকট্যাক্ট দেওয়া হয়েছে এবং 1.0.0-SNAPSHOT এর একটি পম রেফারেন্স, সংস্করণগুলি: পরবর্তী সংস্করণ এবং সংস্করণ: পরবর্তী প্রকাশগুলি 1.0.0 এ সমাধান করবে যেখানে সংস্করণগুলি: সর্বশেষ সংস্করণ এবং সংস্করণগুলি: সর্বশেষ-প্রকাশনাগুলি শ্রদ্ধার সাথে 1.0.1-এসএনএপশট এবং 1.0.0 এ সমাধান করবে।
রায়ান বিসলে

1
আপনি খুব সুন্দর এই টেবিলটিতে সংস্করণ / রিলিজ / স্ন্যাপশটের মধ্যে কিছু অনিশ্চয়তা সমাধান করতে পারেন: goo.gl/iDq6PK
Ev0oD

1
সমস্ত সম্ভাব্য এবং সম্পর্কযুক্ত লক্ষ্য মুদ্রণ সহায়ক নয়।
মারিউজস

2
আমি সংস্করণগুলি ভাবব: ব্যবহারের সর্বশেষতম সংস্করণগুলি ওপির বেশিরভাগ সমস্যার সমাধান করে।
অ্যালেক্স আর

172

দয়া করে এই পৃষ্ঠাটি দেখুন (বিভাগ "নির্ভরতা সংস্করণ সীমা" বিভাগ)। আপনি যা করতে চাইতে পারেন তা এমন কিছু

<version>[1.2.3,)</version>

এই সংস্করণ ব্যাপ্তিগুলি ম্যাভেন 2 এ প্রয়োগ করা হয়েছে।


কিছু কারণে এই বিকল্পটি আমার পক্ষে কাজ করে নি, এটি সীমার মধ্যে একটি সংস্করণ বেছে নিয়েছে তবে নতুনটি নয়।
সোরিন

4
আপনি কীভাবে ম্যাভেন সংস্করণ সংখ্যাগুলি তুলনা করতে পারেন তার নিবিড় নজর দিতে চাইতে পারেন - আপনি যদি কোনও কঠোর প্যাটার্নের সাথে মাপেন না তবে মাভেন স্ট্রিংগুলির সাথে তুলনামূলকভাবে সংখ্যার তুলনা করে।
থরবজর্ন রাভন অ্যান্ডারসন

পৃষ্ঠাটি কোডহাউসে রয়েছে এবং নিজেকে এমন জিনিস হিসাবে বর্ণনা করে যে "ম্যাভেন ২.০ এর জন্য এখনও প্রয়োগ করা হয়নি" ... মাভেন ডকুমেন্টেশন নিজেই সংস্করণ ব্যাপ্তি সম্পর্কে কিছু বলে না। আমি কিছু অনুপস্থিত করছি? সংস্করণ সীমা কখন চালু হয়েছিল? অফিসিয়াল ডকুমেন্টেশনে এগুলি কোথায় বর্ণিত হয়েছে?
শ্যানন

1
আপনি ভুল, সংস্করণ পরিসরটির অর্থ সমস্ত সংস্করণ 1.2.3 থেকে উচ্চতর পর্যন্ত ঠিক আছে। এটি মোটেই সর্বশেষতম সংস্করণ নয়।
মারিউজস

@ সোরিন আপনার প্রকল্পে সম্ভবত অন্যান্য নির্ভরতা রয়েছে যা প্রশ্নে নিদর্শনগুলির উপরও নির্ভর করে? mvn dependency:tree -Dverboseএটি বের করার চেষ্টা করুন । এটি অপ্রত্যাশিত সংস্করণটি ব্যাখ্যা করতে পারে।
ইউজিন বেরেসভস্কি

83

অন্যদের মতো নয় বলে আমি মনে করি যে আপনি সর্বদা সর্বশেষতম সংস্করণটি পেতে চান এমন অনেকগুলি কারণ রয়েছে । বিশেষত যদি আপনি অবিচ্ছিন্ন মোতায়েন করছেন (আমাদের মাঝে মাঝে একটি দিনের মধ্যে 5 টি রিলিজ থাকে) এবং কোনও মাল্টি-মডিউল প্রকল্প করতে চান না।

আমি যা করি তা হডসন / জেনকিন্সকে প্রতিটি বিল্ডের জন্য নিম্নলিখিতগুলি করা হয়:

mvn clean versions:use-latest-versions scm:checkin deploy -Dmessage="update versions" -DperformRelease=true

এটি হ'ল আমি নির্ভরতাগুলি আপডেট করতে সংস্করণ প্লাগইন এবং এসএমএইচ প্লাগইন ব্যবহার করি এবং তারপরে এটি উত্স নিয়ন্ত্রণে পরীক্ষা করে দেখি। হ্যাঁ আমি আমার সিআইকে এসসিএম চেকিনগুলি করতে দিয়েছি (যা আপনাকে মভেন রিলিজ প্লাগইনের জন্য যাইহোক করতে হবে)।

আপনি যা চান তা আপডেট করতে আপনি সংস্করণ প্লাগইন সেটআপ করতে চান:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <includesList>com.snaphop</includesList>
        <generateBackupPoms>false</generateBackupPoms>
        <allowSnapshots>true</allowSnapshots>
    </configuration>
</plugin>

আমি রিলিজ প্লাগইনটি রিলিজ করতে ব্যবহার করি যা -SNAPSHOT এর যত্ন নেয় এবং এটি যাচাই করে যে -SNAPSHOT এর একটি সংস্করণ রয়েছে (যা গুরুত্বপূর্ণ)।

আমি যা করি তা যদি আপনি করেন তবে আপনি সমস্ত স্ন্যাপশট বিল্ডের জন্য সর্বশেষতম সংস্করণ এবং রিলিজ বিল্ডগুলির জন্য সর্বশেষতম প্রকাশনা সংস্করণ পাবেন। আপনার বিল্ডগুলি পুনরুত্পাদনযোগ্যও হবে।

হালনাগাদ

আমি এই কর্মপ্রবাহের কিছু বিশদ জিজ্ঞাসা করে কিছু মন্তব্য লক্ষ্য করেছি। আমি বলব যে আমরা এই পদ্ধতিটি আর ব্যবহার করি না এবং মভেন সংস্করণ প্লাগইন বগী এবং সাধারণভাবে সহজাত ত্রুটিযুক্ত হওয়ার বড় কারণ।

এটি ত্রুটিযুক্ত কারণ পোমকে সঠিকভাবে চালানোর জন্য সমস্ত বিদ্যমান সংস্করণগুলিকে সামঞ্জস্য করতে সংস্করণ প্লাগইনটি চালনা করতে হবে। এটি হ'ল সংস্করণ প্লাগইনটি পোমের মধ্যে উল্লিখিত সংস্করণটি খুঁজে না পাওয়া গেলে কোনও কিছুর সর্বশেষ সংস্করণে আপডেট করতে পারে না। এটি প্রকৃতপক্ষে বিরক্তিকর কারণ আমরা প্রায়শই ডিস্ক জায়গার কারণে পুরানো সংস্করণগুলি সাফ করি।

সত্যই আপনার সংস্করণগুলি সামঞ্জস্য করার জন্য ম্যাভেন থেকে আলাদা একটি সরঞ্জাম প্রয়োজন (যাতে আপনি সঠিকভাবে চালানোর জন্য পম ফাইলের উপর নির্ভর করেন না)। আমি নীচু ভাষায় এমন একটি সরঞ্জাম লিখেছি যা বাশ। স্ক্রিপ্টটি সংস্করণ প্লাগইনের মতো সংস্করণগুলি আপডেট করবে এবং উত্স নিয়ন্ত্রণে পমটিকে আবার পরীক্ষা করবে। এটি এমভিএন সংস্করণ প্লাগইনের চেয়ে 100x দ্রুত গতিতে চলেছে। দুর্ভাগ্যক্রমে এটি জনসাধারণের ব্যবহারের জন্য কোনও পদ্ধতিতে লেখা হয়নি তবে লোকেরা আগ্রহী হলে আমি এটি তৈরি করতে এবং এটি একটি টুকরো টুকরো বা গিথুবে রাখতে পারতাম।

ওয়ার্কফ্লোতে ফিরে কিছু মন্তব্য জিজ্ঞাসা করা হয়েছিল যে এটিই আমরা করি:

  1. আমাদের নিজস্ব জেনকিন্স কাজ সহ তাদের নিজস্ব সংগ্রহস্থলে 20 বা ততোধিক প্রকল্প রয়েছে
  2. আমরা যখন প্রকাশ করি তখন মাভেন রিলিজ প্লাগইন ব্যবহৃত হয়। এর কার্যপ্রবাহটি প্লাগইনের ডকুমেন্টেশনে আচ্ছাদিত। ম্যাভেন রিলিজ প্লাগইন ধরণের স্তন্যপান (এবং আমি সদয় হয়ে উঠছি) তবে এটি কার্যকর হয়। একদিন আমরা আরও অনুকূল কিছু দিয়ে এই পদ্ধতিটি প্রতিস্থাপনের পরিকল্পনা করছি।
  3. যখন প্রকল্পগুলির মধ্যে একটি জেনকিনগুলি প্রকাশিত হয় তারপরে একটি বিশেষ কাজ চালায় আমরা আপডেটটি সমস্ত সংস্করণে কাজ বলব (জেনকিনস কীভাবে জানে যে এটির একটি মুক্তি জটিল অংশ, কারণ ম্যাভেন জেনকিন্স রিলিজ প্লাগইনটিও বেশ কৃপণ)।
  4. সমস্ত সংস্করণে আপডেট সমস্ত 20 টি প্রকল্প সম্পর্কে জানে। নির্ভরতা ক্রমে মডিউল বিভাগের সমস্ত প্রকল্পের সাথে সুনির্দিষ্ট হওয়া এটি একটি সামগ্রিক পম। জেনকিনস আমাদের ম্যাজিক গ্রোভি / বাশ ফু চালান যা সমস্ত প্রকল্পগুলিকে সর্বশেষ সংস্করণে আপডেট করে এবং পোমগুলি পরীক্ষা করবে (মডিউল বিভাগের উপর ভিত্তি করে আবার নির্ভরতা ক্রমে সম্পন্ন হবে)।
  5. প্রতিটি প্রকল্পের জন্য যদি পম পরিবর্তিত হয় (কারণ কিছুটা নির্ভরতার সংস্করণ পরিবর্তিত হয়) এটি চেক ইন করা হয় এবং তারপরে আমরা তাত্ক্ষণিকভাবে জেনকিন্সকে সেই প্রকল্পের জন্য সংশ্লিষ্ট কাজ চালাতে পিন করি (এটি হ'ল নির্ভরতা ক্রম সংরক্ষণের জন্য অন্যথায় আপনি দয়াতে রয়েছেন) এসসিএম পোল শিডিয়ুলারের)।

এই মুহুর্তে আমি অভিমত করছি যেভাবেই হোক আপনার সাধারণ বিল্ড থেকে মুক্তি এবং অটো সংস্করণকে আলাদা সরঞ্জাম দেওয়া ভাল have

এখন আপনি ভাবতে পারেন যে উপরে তালিকাভুক্ত সমস্যার কারণে মাভেন সাজানোর ধাক্কা কিন্তু এটি আসলে এমন একটি বিল্ড সরঞ্জামের সাথে মোটামুটি কঠিন হবে যার প্রসারণযোগ্য সিনট্যাক্স (ওরফে এক্সএমএল) পার্স করার পক্ষে কোনও ঘোষিত সহজ নয় ।

প্রকৃতপক্ষে আমরা ইঙ্গিত বাশ / গ্রোভি স্ক্রিপ্টগুলিতে সহায়তা করার জন্য নেমস্পেসের মাধ্যমে কাস্টম এক্সএমএল বৈশিষ্ট্য যুক্ত করি (উদাহরণস্বরূপ এই সংস্করণটি আপডেট করবেন না)।


5
আপনার উত্তরে একটি অনুপ্রেরণা (ধারাবাহিক স্থাপনা) অন্তর্ভুক্ত করার জন্য ধন্যবাদ
ডেভিড জে লিজজেউস্কি

10
আমি মনে করি যে এখানে গুরুত্বপূর্ণ পয়েন্টগুলি এই পদ্ধতির সাথে পুনরুত্পাদনযোগ্য, অন্যদিকে সংস্করণ ব্যাপ্তি বা-সর্বশেষ ব্যবহার করার সময় সেগুলি হয় না!
marc.guenther

বিল্ড চালানোর আগে প্রজেক্ট পমে পরিবর্তন আনতে একটি বাহ্যিক সরঞ্জাম ব্যবহার করে আমি সমাধানটি দ্বিতীয় করতে চাই। সংস্করণ-পরিসীমা-প্লাগইন সহজাতভাবে অ্যাকাউন্টের তারিখগুলি গ্রহণের জন্য এবং কেবল সংস্করণগুলিতে না নেওয়া হিসাবে আমরা এই পদ্ধতিটি ব্যবহার করছি।
ড্যানিয়েল হাজডুক

37

নির্ভরতা সিনট্যাক্স নির্ভরতা সংস্করণ প্রয়োজনীয়তা নির্দিষ্টকরণ ডকুমেন্টেশনে অবস্থিত । এখানে এটি সম্পূর্ণতার জন্য:

নির্ভরতাগুলির versionউপাদান কার্যকর নির্ভরতা সংস্করণ গণনা করতে ব্যবহৃত সংস্করণ প্রয়োজনীয়তা সংজ্ঞায়িত করে। সংস্করণ প্রয়োজনীয়তার নিম্নলিখিত বাক্য গঠন রয়েছে:

  • 1.0: 1.0 এ "নরম" প্রয়োজনীয়তা (কেবলমাত্র একটি সুপারিশ, যদি এটি নির্ভরতার জন্য অন্যান্য সমস্ত ব্যাপ্তির সাথে মেলে)
  • [1.0]: 1.0 এ "হার্ড" প্রয়োজনীয়তা
  • (,1.0]: x <= 1.0
  • [1.2,1.3]: ১.২ <= x <= 1.3
  • [1.0,2.0): 1.0 <= x <2.0
  • [1.5,): x> = 1.5
  • (,1.0],[1.2,): x <= 1.0 বা x> = 1.2; একাধিক সেট কমা দ্বারা পৃথক করা হয়
  • (,1.1),(1.1,): এটি ১.১ বাদ দেয় (উদাহরণস্বরূপ যদি এটি এই লাইব্রেরির সাথে সম্মিলিতভাবে কাজ না করার জন্য পরিচিত হয়)

আপনার ক্ষেত্রে, আপনি যেমন কিছু করতে পারে <version>[1.2.3,)</version>


15

আপনি সম্ভবত উন্নয়নের সংস্করণগুলির উপর নির্ভর করছেন যা বিকাশের সময় স্পষ্টতই অনেক পরিবর্তন করে?

বিকাশ প্রকাশের সংস্করণ বৃদ্ধি করার পরিবর্তে, আপনি যখন প্রয়োজন তখন ওভাররাইট করে এমন একটি স্নাপশট সংস্করণ ব্যবহার করতে পারেন, যার অর্থ আপনাকে প্রতিটি ছোটখাট পরিবর্তনে সংস্করণ ট্যাগটি পরিবর্তন করতে হবে না। 1.0-এসএনএপশট এর মতো কিছু ...

তবে আপনি অন্য কিছু অর্জনের চেষ্টা করছেন;)


7

সর্বশেষে কে সর্বদা ব্যবহার করছেন, দয়া করে তা নিশ্চিত করুন -আপনি সর্বশেষ স্ন্যাপশটটি টানবেন না।

mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories

এমনকি -উআইটিও ব্যবহার করছেCouldn't download artifact: Failed to resolve version for com.app:common:jar:LATEST
রবার্ট

7

এই প্রশ্নটি উত্থাপিত হওয়ার মধ্যেই ম্যাভেনের সংস্করণ রেঞ্জগুলির সাথে কিছু সংযোগ ছিল, তবে এগুলি ম্যাভেনের নতুন সংস্করণগুলিতে সমাধান করা হয়েছে। এই নিবন্ধটি ম্যাভেন সংস্করণগুলি কীভাবে বোঝে তা আরও ভালভাবে বুঝতে ভার্সন কীভাবে কাজ করে এবং সর্বোত্তম অনুশীলনগুলি তা খুব ভালভাবে ক্যাপচার করে: https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855


2
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
কার্ল রিখটার

6

সত্যটি এখনও 3.x এ রয়েছে এটি এখনও কাজ করে, আশ্চর্যরূপে প্রকল্পগুলি তৈরি করে এবং মোতায়েন করে। তবে সর্বশেষে / রিলেস কীওয়ার্ডটি m2e এবং গ্রহনে সমস্ত জায়গায় সমস্যা সৃষ্টি করে, ALSO প্রকল্পগুলি নির্ভরতাটির উপর নির্ভর করে যা সর্বশেষ / প্রকাশের মাধ্যমে নিযুক্ত ভার্সনটি সনাক্ত করতে ব্যর্থ হয়।

আপনি যদি সংস্করণটিকে সম্পত্তি হিসাবে সংজ্ঞায়িত করার চেষ্টা করেন এবং অন্য কোথায় এটি উল্লেখ করেন তবে এটি সমস্যা সৃষ্টি করবে।

সুতরাং উপসংহারটি হ'ল সংস্করণ-মভেন-প্লাগইনটি যদি আপনি পারেন তবে ব্যবহার করুন ।


5

কখনও কখনও আপনি সংস্করণ ব্যাপ্তি ব্যবহার করতে চান না, কারণ মনে হয় আপনার নির্ভরতাগুলি সমাধান করার জন্য এগুলি "ধীর" হয়ে রয়েছে, বিশেষত যখন স্থিরভাবে অবিচ্ছিন্ন প্রসব হয় এবং প্রচুর সংস্করণ থাকে - প্রধানত ভারী বিকাশের সময়।

সংস্করণ-মাভেন-প্লাগইন ব্যবহার করার জন্য একটি কাজ হতে পারে । উদাহরণস্বরূপ, আপনি কোনও সম্পত্তি ঘোষণা করতে পারেন:

<properties>
    <myname.version>1.1.1</myname.version>
</properties>

এবং আপনার পোম ফাইলে সংস্করণ-মাভেন-প্লাগইন যুক্ত করুন:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <properties>
                    <property>
                        <name>myname.version</name>
                        <dependencies>
                            <dependency>
                                <groupId>group-id</groupId>
                                <artifactId>artifact-id</artifactId>
                                <version>latest</version>
                            </dependency>
                        </dependencies>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>

তারপরে, নির্ভরতা আপডেট করার জন্য আপনাকে লক্ষ্যগুলি সম্পাদন করতে হবে:

mvn versions:update-properties validate

১.১.১ এর চেয়ে নতুন সংস্করণ যদি থাকে তবে তা আপনাকে বলবে:

[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2

3

আপনি যদি চান যে মাভেনের নির্ভরতার সর্বশেষতম সংস্করণটি ব্যবহার করা উচিত, তবে আপনি ভার্সন ম্যাভেন প্লাগিন ব্যবহার করতে পারেন এবং এই প্লাগইনটি কীভাবে ব্যবহার করবেন, টিম ইতিমধ্যে একটি ভাল উত্তর দিয়েছেন, তার উত্তরটি অনুসরণ করুন ।

তবে একজন বিকাশকারী হিসাবে, আমি এই ধরণের অনুশীলনের সুপারিশ করব না। কেন?

প্রশ্নটির মন্তব্যে ইতিমধ্যে পাস্কেল থিভেন্ট কেন দিয়েছেন তার উত্তর

পুনরুত্পাদনযোগ্যতার জন্য আমি সত্যিই এই অনুশীলনের (সংস্করণ ব্যাপ্তি ব্যবহার করে) সুপারিশ করি না। এমন একটি বিল্ড যা হঠাৎ কোনও অজানা কারণে ব্যর্থ হতে শুরু করে সেটি ম্যানুয়ালি কোনও সংস্করণ নম্বর আপডেট করার চেয়ে বেশি বিরক্তিকর।

আমি এই ধরণের অনুশীলনের সুপারিশ করব:

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

এটি বজায় রাখা সহজ এবং ডিবাগ করা সহজ। আপনি কোনও সময় ছাড়াই আপনার পোম আপডেট করতে পারবেন।


আপনি যদি সংস্করণ-মাভেন-প্লাগইন ব্যবহার করেন তবে বিল্ডটি এখনও পুনরুত্পাদনযোগ্য। খোলামেলা সংস্করণটি আপডেট করা একটি পৃথক প্রতিশ্রুতিতে করা যেতে পারে (আপনি আমার উত্তর থেকে দেখতে পাচ্ছেন, আপনাকে একটি পৃথক লক্ষ্য নির্দিষ্ট করতে হবে, এটি বিল্ডে জাদুকরভাবে ঘটে না)।
মার্কন

1

মাইভেন সলিউশনটি মেভেন ৩.৩.৪ এ, নেক্সাস ব্যবহার করুন, গ্রহনে:

<dependency>
    <groupId>yilin.sheng</groupId>
    <artifactId>webspherecore</artifactId>
    <version>LATEST</version> 
</dependency>

তারপরে গ্রহনে: atl + F5এবং নির্বাচন করুনforce update of snapshots/release

এটা আমার জন্য কাজ করে.


কমান্ড লাইনে অকার্যকর কাজ করবে না যদিও কারণে বিভিন্ন পোস্টে নীচে বর্ণিত হয়েছে। আমাদের অনেককে অটোমেটেড বিল্ডের সাথে সামঞ্জস্য করতে হয় এবং তাই আমাদের এক্সপ্লোর পরিচালনা গ্রহকে নয়, কমান্ড লাইনে রান করার সময় আমাদের পিওএমগুলি কাজ করতে হয়।
বিগবাডমাউস

আমি ম্যাভেন 3.5.৩.৪ ব্যবহার করছি এবং 'সর্বশেষ' ব্যবহার করার সময় এটি পেয়েছি: হয় সর্বশেষ বা প্রকাশ করুন (তাদের উভয়ই অবচয় করা হচ্ছে) @ লাইন 154, কলাম 13
লিওনার্দো লিওনার্দো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.