মাল্টি-মডিউল মাভেন প্রকল্পে মডিউলগুলির মধ্যে এসসিআর / পরীক্ষার ক্লাস ভাগ করে নেওয়া


120

আমার একটি মাল্টি-মডিউল মাভেন প্রকল্প রয়েছে। এই উদাহরণের জন্য, দুটি মডিউল বিবেচনা করুন:

  • data
  • consumer

consumerমডিউলটির মডিউল রয়েছেdata নির্ভরতা হিসাবে ।

মডিউল dataকোর ক্লাসগুলির একটি গুচ্ছ ঘোষণা করে। src/testতাদের ব্যবহারের অধীনে পরীক্ষা রয়েছে । এই পরীক্ষাগুলির জন্য কিছু দীর্ঘ-বায়ুযুক্ত অবজেক্ট তৈরির প্রয়োজন হয়, সুতরাং এই বিষয়গুলি তৈরি করতে আমার কিছু ইউটিলিটি পদ্ধতি সহ একটি বর্গ রয়েছে। এই ইউটিলিটি ক্লাসটি ( SampleDataHelper) রয়েছেsrc/test শ্রেণিবিন্যাসে রয়েছে।

আমারও consumerমডিউলে কিছু পরীক্ষা আছে যার জন্য এইগুলি দীর্ঘ-বায়ুযুক্ত কিছু তৈরি করতে হবে। আমি আমার গাছে থাকা পরীক্ষাগুলিতে আমার SampleDataHelperক্লাসটি (সংজ্ঞায়িত data src/test) ব্যবহার করতে চাই consumer src/test। দুর্ভাগ্যক্রমে, যদিও এর dataনির্ভরতা consumer,consumer ক্লাস অধীনে অস্তিত্ব দেখতে পায় না data src/test

এটিকে মোকাবেলায়, আমি ভেবেছিলাম আমি অন্য একটি মডিউল তৈরি করতে পারি ( data-test), এবং SampleDataHelperএটির অধীনে চলে যেতে পারি src/main। তারপরে আমি এর পরীক্ষার স্কোপ নির্ভরতা data-testহিসাবে অন্তর্ভুক্ত করব । দুর্ভাগ্যক্রমে, এটি একটি বিজ্ঞপ্তি নির্ভরতা: ব্যবহার করে , এছাড়াও প্রয়োজন ।datadatadata-testdata-testdata

আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল এর SampleDataHelperঅধীনে রাখাdata src/main একটি অধীনে testপ্যাকেজ এবং আশাবাদ ব্যক্ত করেন যে কোনো সত্যিকারের আবেদন কোড কখনো এটা কল।

আমি আমার SampleDataHelperক্লাসটিকে মডিউলগুলির মধ্যে না রেখে কীভাবে ভাগ করতে পারি src/main?


1
পরীক্ষা করে দেখুন এই উত্তর । আমি মনে করি এটি আপনাকে সাহায্য করা উচিত।
অ্যান্ড্রু লগভিনভ


@ অ্যান্ড্রুলোগভিনভ: আপনার লিঙ্কিত উত্তরের জন্য কি "দ্বি-পদক্ষেপ" নির্মাণের প্রয়োজন হবে না? আমার দ্বিতীয় মডিউলটিও সংকলন করার আগে প্রথমে একটি মডিউল ( ) তৈরি এবং স্থাপন করাdataconsumer
গ্রেগ কফ্ফ

আমার মনে হয় আপনি পারে কিছু সমস্যা জুড়ে আসা যদি আপনি ব্যবহার mvn package, কিন্তু এটা একটা একক পদক্ষেপ Build এ ঠিক সূক্ষ্ম কাজ করা উচিত যখন আপনি ব্যবহার mvn installবা mvn deploy। শুধু একটি দ্রুত নোট। আমাদের বড় প্রকল্পগুলির একটিতে আমাদের জুনিটের উপর একটি মোড়ক রয়েছে TestBaseএবং এটি অবস্থিত src/mainযেখানে আমি কোনও ভাল ধারণাও মনে করি না।
অ্যান্ড্রু লগভিনভ

উত্তর:


152

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

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>2.2</version>
  <executions>
    <execution>
      <goals>
        <goal>test-jar</goal>
      </goals>
    </execution>
  </executions>
</plugin>

আপনার গ্রাহক প্রকল্পটি test-jarঅবশ্যই পরীক্ষার সুযোগের সাথে সাধারণ ডেটা জেআর আর্টিক্ট, এবং অতিরিক্ত শৈল্পিক উভয়ের উপর নির্ভর করবে :

<dependency>
  <groupId>com.foo</groupId>
  <artifactId>data</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

আমি অনেকবার এই পদ্ধতির ব্যবহার করেছি এবং এটি ভালভাবে কাজ করে।


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

@ স্ট্যাসস সম্ভবত আপনি সে সম্পর্কে একটি পৃথক প্রশ্ন খুলুন সেরা।
ডানকান জোন্স


1

সুতরাং সমস্যাটি হ'ল (কিছু) পরীক্ষায় data মডিউলটিতেSampleDataHelper ক্লাসের উপর নির্ভর করে ? আপনি স্থানান্তর করতে পারেন SampleDataHelperথেকে বর্গ src/mainএর data-testমডিউল, যদি আপনি একই সময়ে পরীক্ষা (যে নির্দিষ্ট শ্রেণী উপর নির্ভর করে) সরানো src/testএর data-testমডিউল। ফলস্বরূপ, আর কোনও বিজ্ঞপ্তি নির্ভরতা থাকবে না।


1
যদি আমি আপনাকে বুঝতে পারি, আপনি পরামর্শ দিচ্ছেন যে যে কোনও পরীক্ষার ব্যবহার মডিউল বা মডিউল (যথাযথ) এর মধ্যে SampleDataHelperথেকে সরানো হবে । দুর্ভাগ্যক্রমে আমি এটি একটি খুব "ঝরঝরে" সমাধান খুঁজে পাই না কারণ এটি আমার পরীক্ষাগুলি তাদের যে মডিউলটি পরীক্ষা করে তা থেকে আলাদা করে নিয়ে যায়। (কঠোরভাবে বলতে গেলে, আপনি কেবল পরীক্ষাগুলি সরিয়ে নেওয়ার কথা বলেছিলেন , তবে আমি মনে করি যে আমি নিজেকে উভয়ই ধারাবাহিকতার জন্য সরিয়ে নেব)। তবে আপনার উত্তরের জন্য আপনাকে ধন্যবাদ। :-)dataconsumerdata-testdata
গ্রেগ কফ্ফ

1
হ্যাঁ, আপনি আমাকে সঠিকভাবে বুঝতে পেরেছিলেন। এবং যুক্তিযুক্তভাবে, এটি একটি ঝরঝরে সমাধানের চেয়ে দ্রুত সমাধান বেশি। :-)
matsev

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

1
@ ডানকোনজোনস দুঃখিত, আমার পোস্টে একটি ছোট টাইপ ছিল। আমি যে বিষয়টিটি চেষ্টা করতে চাইছি তা হ'ল data-testমডিউলটি মডিউলের উপর নির্ভর করবে data(এবং অন্যদিকে নয়)। বিজ্ঞপ্তি নির্ভরতা এড়াতে, বর্তমানে dataমডিউলে থাকা সমস্ত পরীক্ষাগুলি মডিউলটিতে SampleDataHelperচলে যেতে হবে data-test
matsev

গোটচা, এটি আরও অর্থবোধ করে।
ডানকান জোন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.