ম্যাভেন মডিউলগুলি + একটি একক নির্দিষ্ট মডিউল তৈরি করা


382

আমি একটি পিতা বা মাতা প্রকল্পের সঙ্গে একটি মাল্টি-মডিউল ম্যাভেন প্রকল্প আছে Pএবং তিনটি সাব-মডিউল A, Bএবং C। উভয় Bএবং Cযুদ্ধ প্রকল্প এবং উভয়ই নির্ভর করে A

আমি টাইপ করতে পারেন mvn compileমধ্যে Pও উপ-মডিউল সঠিকভাবে কম্পাইল সব আছে। সমস্যাটি তখনই আসে যখন আমি নির্দিষ্ট মডিউলগুলির জন্য অপারেশন করতে চাই।

আমি প্রকল্পের জন্য একটি যুদ্ধ প্যাকেজ করতে সক্ষম হতে চাই B, কিন্তু যখন আমি Bডিরেক্টরি থেকে প্যাকেজ কমান্ড চালাচ্ছি , এটি অভিযোগ করে যে এটি এর জন্য নির্ভরতা খুঁজে পাচ্ছে না A

আমি এই প্রশ্নটি থেকে বুঝতে পারি: ম্যাভেন এবং নির্ভরশীল মডিউলগুলি যা সম্ভবত ম্যাভেন এই ধরণের নির্ভরতা রেজোলিউশনের জন্য ডিজাইন করেননি, তবে এটি কীভাবে আমি প্যাকেজ করব সে প্রশ্নটি জাগিয়ে তোলে B?

  1. mvn packageআমি সত্যিই কেবল যখন চাই তখন কি আমাকে পুরো প্রকল্পের শ্রেণিবিন্যাসের জন্য দৌড়াতে হবে B?

  2. আমি প্রতিবার প্যাকেজ করতে চাইলে কি আমার স্থানীয় স্টোরগুলিতে এ-এর স্ন্যাপশট ইনস্টল করতে হবে B?

Aএখনও সক্রিয় বিকাশের অধীনে থাকা এই দ্বিতীয় দৃশ্যটি খুব মজাদার নয় ।

এখানে কোন সেরা অনুশীলন?


উত্তর:


694

এখানে কোন সেরা অনুশীলন?

মাভেন উন্নত চুল্লি বিকল্পগুলি আরও সুনির্দিষ্টভাবে ব্যবহার করুন:

-pl, --projects
        Build specified reactor projects instead of all projects
-am, --also-make
        If project list is specified, also build projects required by the list

সুতরাং কেবল cdপ্যারেন্ট পি ডিরেক্টরিতে চালনা করুন:

mvn install -pl B -am

এবং এটি বি এবং বি দ্বারা প্রয়োজনীয় মডিউলগুলি তৈরি করবে

মনে রাখবেন যে আপনি যদি artifactIdকোনও ডিরেক্টরি নাম থেকে আলাদা যা উল্লেখ করে থাকেন তবে আপনার একটি কলোন ব্যবহার করা দরকার :

mvn install -pl :B -am

এখানে বর্ণিত হিসাবে: https://stackoverflow.com/a/26439938/480894


15
২০১১ সালে এই পৃষ্ঠাটিতে যে কেউ হিট করছে তার পক্ষে এটি আরও ভাল উত্তর। ম্যাভেনের মধ্যেই মাল্টি-মডিউলগুলির জন্য আরও ভাল সমর্থন রয়েছে (ম্যাভেন ২.১ এবং তারপরের), আপনাকে চুল্লি প্লাগইন ব্যবহার করার দরকার নেই।
স্পেজ

17
আর একটি খুব কার্যকর বিকল্প হ'ল "-আমডি, --এলসো মেক-ডিপেন্ডেন্টস", যা চুল্লি তালিকার প্রকল্পগুলির উপর নির্ভর করে সমস্ত মডিউল তৈরি করে।

1
একটি নাতি মডিউল নির্মাণ সম্পর্কে কি?
বাক্স

12
@ বাক্স, mvn install -pl .,parent/child,parent/child/grandchild একাধিক প্রকল্প এবং পৃথক করতে কমা ব্যবহার করুন। প্যারেন্ট পমের জন্য
নিও

1
যখন আমি clean packageএইভাবে কোনও মডিউল চেষ্টা করি , এটি এখনও ইনস্টল না থাকা চুল্লি নির্ভরতাগুলি সমাধান করতে পারে না। সঙ্গে -amএটা অকারণে deps পুনর্নির্মাণের হবে।
বেসিন

18

বলুন প্যারেন্ট pom.xML এ 6 টি মডিউল রয়েছে এবং আপনি , বি এবং এফ চালাতে চান ।

<modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
        <module>D</module>
        <module>E</module>
        <module>F</module>
  </modules>

1- মূল প্রকল্পে সিডি

 mvn --projects A,B,F --also-make clean install

অথবা

mvn -pl A,B,F -am clean install

অথবা

mvn -pl A,B,F -amd clean install

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

যদিও -am কমান্ডটি একটি বিশেষ প্রকল্পের দ্বারা প্রয়োজনীয় সমস্ত প্রকল্পকে বহু-মডিউল বিল্ডে তৈরি করে, -amd বা --also-make-depend depend অপশন মাভেনকে একটি প্রকল্প এবং সেই প্রকল্পের উপর নির্ভর করে যে কোনও প্রকল্প তৈরি করতে কনফিগার করে। --Also-make-depend dependates ব্যবহার করার সময় , মাভেন আমাদের চুল্লীর সমস্ত প্রকল্পগুলি নির্দিষ্ট প্রকল্পের উপর নির্ভরশীল প্রকল্পগুলি অনুসন্ধান করতে পরীক্ষা করবে will এটি স্বয়ংক্রিয়ভাবে সেই প্রকল্পগুলি তৈরি করবে এবং অন্য কিছুই নয়।


8

ম্যাভেন একেবারে এই ধরনের নির্ভরতার জন্য তৈরি করা হয়েছিল।

mvn package আপনার স্থানীয় সংগ্রহস্থলে কোনও কিছুই ইনস্টল করবে না এটি কেবলমাত্র প্রকল্পটি প্যাকেজ করে এবং লক্ষ্য ফোল্ডারে রেখে দেয়।

কি mvn install, পিতা বা মাতা প্রকল্পের (ক) সঙ্গে এই সমস্ত উপ-মডিউল আপনার কম্পিউটারের ম্যাভেন সংগ্রহস্থলের মধ্যে ইনস্টল করা হবে যদি সেখানে কোন পরিবর্তন আপনি শুধু কম্পাইল / উপ-মডিউল প্যাকেজ (বি) এবং ম্যাভেন ইতিমধ্যে প্যাকেজ নিতে হবে প্রয়োজন হয় এবং ঠিক নির্ভরতা ইনস্টল করা।

আপনি mvn installযদি কোডটির কিছু অংশ আপডেট করে থাকেন তবে কেবলমাত্র প্যারেন্ট প্রোজেক্টে একটি দরকার ।


3
এটি বিকাশের সময় একটি দুঃস্বপ্ন হবে যে চিত্রটি একবার আপনি সাব মডিউলটিতে স্থির করে ফেললে আপনাকে এটি ইনস্টল করা হবে এবং তারপরে সার্ভলেট ধারকটি শুরু করা হবে। জীবন সংক্ষিপ্ত :(
hguser

7

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

আপনি প্রকল্পগুলির একটি সেট তৈরি করতে একটি এগ্রিগেটর পম দিয়ে একটি বহু-মডিউল প্রকল্পটি সংজ্ঞায়িত করতে পারেন।

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


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

হ্যাঁ, প্রকল্পগুলির সেট তৈরি করতে মডিউলগুলি ব্যবহার করে, মূল উত্তরের সাথে যুক্ত লিঙ্কটি দেখুন।
ধনী বিক্রেতা

5

আমার উত্তরটি মাভেন এবং নির্ভরশীল মডিউলগুলি একবার দেখুন

ম্যাভেন চুল্লী প্লাগইন একটি প্রকল্প অংশ নির্মাণের সঙ্গে মোকাবিলা করার জন্য ডিজাইন করা হয়।

নির্দিষ্ট লক্ষ্য আপনি এটি ব্যবহার করতে চাইবেন reactor:make


3
এটি সঠিক উত্তর হিসাবে ব্যবহৃত হত তবে ম্যাভেন ২.১ এর সাথে আপনাকে আর চুল্লি প্লাগইন ব্যবহার করার দরকার নেই। "অ্যাডভান্সড রিঅ্যাক্টর
অপশনগুলি

3

আপনি বলেছেন যে আপনি "সত্যিই কেবল বি চান", তবে এটি মিথ্যা। আপনি বি চান, তবে এতে কোনও পরিবর্তন হয়েছে ("সক্রিয় উন্নয়ন") থাকলে আপনি একটি আপডেট এও চান।

সুতরাং, কখনও কখনও আপনি A, B এবং C. এর সাথে কাজ করতে চান এই ক্ষেত্রে আপনার একিগ্রেটর প্রকল্প পি রয়েছে A যে ক্ষেত্রে আপনি A এবং B এর সাথে কাজ করতে চান সেই ক্ষেত্রে (তবে তবে সি চান না ) সমবেতকারী প্রকল্প তৈরি করা উচিত Q ।

সম্পাদনা করুন 2016 : উপরোক্ত তথ্য সম্ভবত 2016 এর 2009 হিসাবে প্রাসঙ্গিক ছিল, আমি অত্যন্ত অধিকাংশ ক্ষেত্রেই এই উপেক্ষা এবং নিছক ব্যবহার করার প্রস্তাব -amবা -plগৃহীত উত্তর বর্ণনা অনুযায়ী কম্যান্ড-লাইন ফ্ল্যাগ। আপনি যদি ভি 2.1 এর আগে থেকে ম্যাভেনের একটি সংস্করণ ব্যবহার করছেন তবে প্রথমে এটি পরিবর্তন করুন :)


গ্রাম্ফ্ ... তারপরে আমি প্রকল্পের মতো আরও অনেক অ্যাগ্রিগেটর প্রকল্প শেষ করব।
ক্রিস

@ ক্রিস আমি এখন আর এটির পরামর্শ দেব না। কেউ এখনও কীভাবে এটি জানতে চায় সে ক্ষেত্রে আমি এটি এখানে রেখে দেব, তবে আমি এখনই -am এবং -pl ফ্ল্যাগগুলি এখনই ব্যবহার করি। আমি আমার উত্তর আপডেট করেছি।
জ্যাক থম্পসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.