মাল্টি-মডিউল মাভেন প্রকল্পে মডিউলগুলির সংস্করণ সংখ্যা আপডেট করা


324

আমার একটি মাল্টি-মডিউল মাভেন প্রকল্প রয়েছে। আমরা একসাথে এই সমস্ত মডিউল সংস্করণ করতে চান। তবে এখন পর্যন্ত আমি নীচে প্রতিটি মডিউল pom.xml এর হার্ড-কোডিং সংস্করণটি শেষ করছি

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

এবং প্রধান পিতামাতার মডিউলটির নীচের কনফিগারেশন রয়েছে

<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-application</artifactId>
<version>2.50.0.g</version>
<packaging>pom</packaging>

1
আপনার প্রশ্নটি ভুলরূপে করা হয়েছে এবং সত্যিকারের মাল্টি-মডিউল ("সমষ্টি") পিওএম থাকা লোকজনকে বিভ্রান্ত করছে। আপনার উদাহরণ থেকে এবং উত্তরগুলি থেকে এটি প্রদর্শিত হয় আপনি সত্যিই কোনও প্যারেন্ট POM সম্পর্কে কথা বলছেন, কোনও মাল্টি-মডিউল নয়, সামগ্রিক POM। Maven.apache.org/pom.html# অগ্রিগেশন দেখুন ।
গ্যারেট উইলসন

উত্তর:


630

সংস্করণ-মাভেন প্লাগইনversions:set থেকে ব্যবহার করুন :

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT

এটি একটি বহু-মডিউল প্রকল্পের সমস্ত পম সংস্করণ, প্যারেন্ট সংস্করণ এবং নির্ভরতা সংস্করণগুলিকে সামঞ্জস্য করবে।

আপনি যদি ভুল করে থাকেন তবে করবেন

mvn versions:revert

পরে, বা

mvn versions:commit

আপনি যদি ফলাফল নিয়ে খুশি হন।


দ্রষ্টব্য: এই সমাধানটি ধরে নিয়েছে যে সমস্ত মডিউলগুলি সামগ্রিক পমকে প্যারেন্ট পম হিসাবেও ব্যবহার করে, এমন একটি দৃশ্য যা এই উত্তরের সময়টিকে মান হিসাবে বিবেচিত হত। যদি এটি না হয় তবে গ্যারেট উইলসনের উত্তরের জন্য যান ।


5
এটি দুর্দান্ত হত যদি এমন কোনও সমাধান হয়ে থাকে যা আপনাকে প্রতিটি মডিউলটি বাস্তবে পরিবর্তন করার প্রয়োজন হয় না। আমি ভাবতে পারি একমাত্র বিকল্প হ'ল প্যারেন্ট-পমের জন্য সর্বদা একটি স্ন্যাপশট সংস্করণ ব্যবহার করা।
আমানিকা

54
অতিরিক্ত হিসাবে versions:setএটি নির্দিষ্ট করতে পারে -DgenerateBackupPoms=false, ডিফল্ট হিসাবে এই প্লাগইনটি মূল পম ফাইলগুলিকে ব্যাক আপ করে।
মাকসিম সোরোকিন

20
এটি এর বিন্দু versions:commit: "পমের প্রাথমিক ব্যাকআপ সরিয়ে দেয় এবং এর ফলে পরিবর্তনগুলি গ্রহণ করে।"
মাইকেল লাফারগু

2
একটি নতুন প্লাগইন এই প্রশ্নের বর্ণিত সমস্যাটিকে আলাদাভাবে
স্টিফান

1
@ মিশেলল্যাফার্গু এমভিএন সংস্করণ: প্রতিশ্রুতিটি আগের পোম.এক্সএমএল থেকে তৈরি ব্যাকআপ ফাইলগুলি সরিয়ে ফেলবে বলে মনে হচ্ছে
ক্রিস রকওয়েল

58

প্রদত্ত উত্তরটি ধরে নিয়েছে যে প্রকল্পটি মডিউল সমষ্টি ছাড়াও প্রকল্পের উত্তরাধিকার হিসাবে ব্যবহার করবে use আসলে এগুলি স্বতন্ত্র ধারণা:

https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance_vs_Project_Aggregation

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

অনেকগুলি পড়া এবং পরীক্ষার পরে দেখা যাচ্ছে যে কেবলমাত্র অ্যাগ্রিগেটর পিওএমই নয়, সমস্ত সংহত মডিউলগুলিও আপডেট করার জন্য ভার্সন ম্যাভেন প্লাগইন ব্যবহার করার একটি উপায় রয়েছে ; এটি processAllModulesবিকল্প। নিম্নলিখিত কমান্ডটি অবশ্যই এগ্রিগেটর প্রকল্পের ডিরেক্টরিতে করা উচিত:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules

ভার্সন ম্যাভেন প্লাগইন কেবলমাত্র সমস্ত অন্তর্ভুক্ত মডিউলগুলির সংস্করণগুলিই আপডেট করবে না এটি আন্তঃ-মডিউল নির্ভরতাও আপডেট করবে !!!! এটি একটি বিশাল জয় এবং প্রচুর সময় সাশ্রয় করবে এবং সব ধরণের সমস্যা প্রতিরোধ করবে।

অবশ্যই সমস্ত মডিউলগুলির পরিবর্তনগুলি করতে ভুলবেন না, যা আপনি একই স্যুইচ দিয়েও করতে পারেন:

mvn versions:commit -DprocessAllModules

আপনি সম্পূর্ণরূপে ব্যাকআপ পিওএমএস দিয়ে বিতরণ করার সিদ্ধান্ত নিতে পারেন এবং সমস্ত কমান্ডে করার জন্য:

mvn versions:set -DnewVersion=2.50.1-SNAPSHOT -DprocessAllModules -DgenerateBackupPoms=false

বিল্ড-সহায়ক প্লাগইনের মতো আমরা কীভাবে পরবর্তী সংস্করণটি স্বয়ংক্রিয় করব?
ল্যাটিন্ট্রান্সলেশন

Maven 3.5.0 ব্যবহার করে আমি এটি কাজ করতে পারি না to আমার প্রকল্পের সমষ্টি রয়েছে এবং কেবল প্যারেন্ট পম আপডেট হয়েছিল। আমি প্রকল্পের উত্তরাধিকারের জন্যও (একত্রিতকরণের সাথে - সরবরাহিত লিঙ্ক থেকে "তিনটি বিধি") চেষ্টা করেছি এবং আবার কেবল প্যারেন্ট পম আপডেট হয়েছিল।
সিকিং

1
এটি মেক-ইট-ওয়ার্কের গোপনীয়তাটি পেয়েছে: প্যারেন্ট পম এবং মডিউলগুলির প্রারম্ভিক সংস্করণটি একই হতে হবে! আমার প্যারেন্ট পমটি "1-SNAPSHOT" দিয়ে শুরু হয়েছিল এবং মডিউলগুলিতে "1.0.0-SNAPSHOT" ছিল। :)
সাইকিং

1
একটি সংযোগকারী প্রকল্পের সঙ্গে, সংযোগকারী এবং submodules এর সংস্করণ সংস্করণ না না একই হতে হবে। (যেমন আপনার অগ্রিগেটর পম খুব কমই পরিবর্তিত হতে পারে এবং একটি নির্দিষ্ট সংস্করণে থাকতে পারে, যখন পৃথক সাবমোডিয়ুলগুলির নিজস্ব প্রকাশের চক্র থাকতে পারে)। চাবিকাঠি সম্পত্তি নির্দিষ্ট করার versions:setপ্লাগ হয় -DoldVersion='*', উপর mojohaus.org/versions-maven-plugin/set-mojo.html এটা স্পষ্টভাবে বলছেন যখন একটি সংযোগকারী প্রকল্পের প্রক্রিয়া এই সম্পত্তি নির্ধারণ করা উচিত।
ম্যাথু ওয়াইজ

2
কোন পরিস্থিতিতে -DprocessAllModulesআসলে কাজ করে? এটি আমার পক্ষে কাজ করে না।
অ্যালেক্স আর

24

আপনি যদি প্রক্রিয়াটি সম্পূর্ণরূপে স্বয়ংক্রিয় করতে চান (যেমন আপনি বর্তমান সংস্করণ নম্বরটি কী তা না জেনে সংস্করণ নম্বরটি বাড়িয়ে তুলতে চান), আপনি এটি করতে পারেন:

mvn build-helper:parse-version versions:set -DnewVersion=\${parsedVersion.majorVersion}.\${parsedVersion.minorVersion}.\${parsedVersion.nextIncrementalVersion} versions:commit

3
ধন্যবাদ, ক্রিমি, আপনি আমার দিনটি বাঁচিয়েছেন
মাকসিম কোস্টরমিন


অথবা আপনি ব্যবহার করতে পারেন-DoldVersion='*'
ম্যাথু ওয়াইস

23

আপনি মাভেন রিলিজ প্লাগইনের প্রকাশ: আপডেট সংস্করণ লক্ষ্য সন্ধান করতে চাইতে পারেন । এটি পিতা-মাতার সংস্করণ পাশাপাশি এর অধীনে সমস্ত মডিউল আপডেট করবে।


আপডেট: দয়া করে নোট করুন যে উপরেরটি রিলিজ প্লাগইন। আপনি যদি মুক্তি দিচ্ছেন না, আপনি ব্যবহার করতে পারেনversions:set

mvn versions:set -DnewVersion=1.2.3-SNAPSHOT

1
এমভিএন সংস্করণ: সেট মডিউলগুলিকে প্রভাবিত করে না।
9 বিএসডিএক্স 9 আরভিজে 0lo


ঠিক আছে যখন চুল্লি বিল্ড একই সময় পিতামাতায় থাকে। কাঠামো অন্যথায় দেখায় এটি বিভ্রান্তিকর ...
9ilsdx 9rvj 0lo

mvn release:update-versions -DautoVersionSubmodulesআমার জন্য ভাল কাজ করেছে, এমনকি আমি প্রকাশ না
করলেও

11

আমি আপনাকে মাল্টি-মডিউল (চুল্লি) বিল্ডগুলি সম্পর্কে মাভেন বইটি পড়তে উত্সাহিত করি ।

আমি বিশেষ করে নিম্নলিখিতটি বোঝাতে চাইছি:

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>
<version>2.50.0.g</version>

মধ্যে পরিবর্তন করা উচিত। এখানে সংজ্ঞায়িত সংস্করণটি কেবল পিতামাতার অংশেই সংজ্ঞায়িত করা উচিত।

<modelVersion>4.0.0</modelVersion>

<parent>
    <artifactId>xyz-application</artifactId>
    <groupId>com.xyz</groupId>
    <version>2.50.0.g</version>
</parent>
<groupId>com.xyz</groupId>
<artifactId>xyz-Library</artifactId>

এটি একটি ভাল লিঙ্ক


10
এবং বিশেষভাবে কি জন্য দেখুন?
থরবজর্ন রাভন অ্যান্ডারসন

2
pom.xmlফাইলগুলির জন্য যথাযথ ফর্ম্যাটিং আনার জন্য +1 , তবে আমি সম্মত (@ থোর্জজরনআরনঅ্যান্ডারসেনের সাথে) এই তথ্যের জন্য একটি সম্পূর্ণ বই পড়া ওভারকিল। : পি
প্রিয়দু নিমরে

7
দুর্ভাগ্যক্রমে পিতামাতার কাছ থেকে সংস্করণ তথ্য উত্তরাধিকারসূত্রে প্রাপ্ত হওয়া প্রকল্পের সমস্ত পম ফাইলগুলিকে সংশোধন করার বোঝা সরিয়ে দেয় না - কারণ তারা সকলেই সংস্করণ সংখ্যায় পিতামাতাকে রেফার করে ।
স্টিভেন দ্য ইজি অ্যামিউজড

1
আপনি সংস্করণ-মাভেন-প্লাগইন ব্যবহার করতে পারেন যা এই সমস্ত স্টাফ পরিচালনা করে বা আপনি মেভেন-রিলিজ-প্লাগইন ব্যবহার করতে পারেন এবং তাই আপনাকে এই ম্যানুয়ালি হ্যান্ডেল করার দরকার নেই ...
খামারবায়েস

5

versions:update-child-modulesআপনি যা খুঁজছেন তা মনে হচ্ছে। আপনি সংস্করণগুলি করতে পারেন: উল্লিখিত হিসাবে সেট করুন তবে এটি পিতামাত্ত সংস্করণ নম্বরগুলি আপডেট করার জন্য একটি হালকা ওজনের উপায়। শিশু মডিউলগুলির জন্য, এটি আমার অভিমত যে আপনার <version>সংজ্ঞাগুলি সরিয়ে নেওয়া উচিত , কারণ তারা পিতামাতার মডিউলটির সংস্করণ নম্বরটি উত্তরাধিকার সূত্রে প্রাপ্ত হবে।


3

সর্বোত্তম উপায় হ'ল যেহেতু আপনি আপনার মডিউলগুলি একসাথে বান্ডিল করতে চান, আপনি কেবলমাত্র <dependencyManagement>বাইরের সর্বাধিক pom.xml(প্যারেন্ট মডিউল) <project>ট্যাগের নীচে ট্যাগ নির্দিষ্ট করতে পারেন । এটি সংস্করণ এবং গোষ্ঠীর নাম নিয়ন্ত্রণ করে। আপনার স্বতন্ত্র মডিউলে আপনাকে কেবলমাত্র নিজের মধ্যে <artifactId>ট্যাগ নির্দিষ্ট করতে হবে pom.xml। এটি প্যারেন্ট ফাইল থেকে সংস্করণ নেবে।


আমি পম.এমএমএল- তে ট্যাগ নির্ভরতা-পরিচালনা পরিচালনা করতে পারি না । আপনি কি অন্য কিছু নিয়ে ভাবছেন ?
আর্টুরুটোনা

0

সবচেয়ে সহজ উপায় হ'ল প্রতিটি pom.xML এর সংস্করণটিকে সালিশী সংস্করণে পরিবর্তন করা। তারপরে এই মডিউলে ব্যবহৃত মডিউলটির সঠিক সংস্করণটি ব্যবহার করতে সেই নির্ভরতা পরিচালনাটি পরীক্ষা করে দেখুন! উদাহরণস্বরূপ, আপনি যদি কোনও টো মডিউল প্রকল্পের সংস্করণ বৃদ্ধি করতে চান তবে আপনাকে অবশ্যই প্রবাহিত করার মতো করতে হবে:

চিলেড মডিউলে:

    <parent>
       <artifactId>A-application</artifactId>
       <groupId>com.A</groupId>
       <version>new-version</version>
    </parent>

এবং প্যারেন্ট মডিউলে:

<groupId>com.A</groupId>
<artifactId>A-application</artifactId>
<version>new-version</version>

0

সাবমোডিয়ুলগুলিতে প্রধান pom.xML এবং মূল সংস্করণ আপডেট করতে:

mvn versions:set -DnewVersion=1.3.0-SNAPSHOT -N versions:update-child-modules -DgenerateBackupPoms=false
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.