কোনও মাভেন বিল্ড চলাকালীন সাবমডিউলটি এড়িয়ে যান


160

আমাদের নির্দিষ্ট পরিবেশে একটি উপ-মডেল এড়িয়ে যেতে সক্ষম হওয়া প্রয়োজন।

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

প্রোফাইল সেটিং দিয়ে এটি করার কোনও উপায় আছে কি? আমি কিছু গুগলিং করেছি এবং অন্যান্য প্রশ্ন / উত্তরগুলি এখানে দেখেছি এবং ভাল সমাধান খুঁজে পাইনি।

আমি মনে করি একটি বিকল্প হ'ল pom.xmlসম্পূর্ণভাবে পিতামাতার কাছ থেকে সেই সাবমডিউলটি সরিয়ে ফেলা এবং কেবলমাত্র সেই মডিউলটি তৈরি করতে আমাদের সিআই সার্ভারে অন্য একটি প্রকল্প যুক্ত করুন।

পরামর্শ?


কেন মাভেন ওয়ে না? এটি আমার কাছে পুরোপুরি বৈধ দাবি।
ম্যাডা

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

উত্তর:


149

অবশ্যই, এটি প্রোফাইল ব্যবহার করে করা যেতে পারে। আপনি আপনার পিতামাতার pom.xML এ নিম্নলিখিত মতো কিছু করতে পারেন।

  ...
   <modules>
      <module>module1</module>
      <module>module2</module>  
      ...
  </modules>
  ...
  <profiles>
     <profile>
       <id>ci</id>
          <modules>
            <module>module1</module>
            <module>module2</module>
            ...
            <module>module-integration-test</module>
          </modules> 
      </profile>
  </profiles>
 ...

আপনার সিআই-তে, আপনি ciপ্রোফাইলের সাথে খাঁটি রান করবেনmvn -P ci clean install


4
দুর্দান্ত উত্তর! আমি জানি না কেন মাভেন ডক্স থেকে এটি খুঁজে বের করতে আমাকে এত সমস্যা হয়েছিল। আমি একটি পরামর্শ দেব যা হ'ল আমি ডিফল্টরূপে চালিত ইন্টিগ্রেশন পরীক্ষাগুলি পছন্দ করি, তাই আমি activeByDefaultসেই প্রোফাইলে যুক্ত করেছি এবং skip-integration-testsসেগুলি এড়াতে সক্ষম হতে অন্য একটি খালি প্রোফাইল (উদাহরণস্বরূপ ) যুক্ত করতে হয়েছিল।
denishaskin

7
সমস্ত ভাগ করা জিনিস নকল না করে এটি করার কোনও উপায় আছে?
জনিআআআআআআআআ

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

8
দুর্ভাগ্যক্রমে, প্রোফাইলটি ইউইং করাতে আপনি পোমের মূল << মডিউল> অংশে পূর্বে উল্লিখিত কোনও মডিউল বাদ দিতে পারবেন না। জির issues.apache.org/jira/browse/MNG-5230 (এবং পুরো পম গঠন) যাতে একটি বিট আরো সতর্ক চিন্তার সঙ্গে অনেক ভালো সম্পূর্ণরূপে বাস্তবায়িত করা হয়ে থাকতে পারে।
এড র্যান্ডাল

2
এই সমাধান কি সত্যিই কাজ করে? কমপক্ষে আমি এটি কাজ করতে পারি না। দেখে মনে হচ্ছে আমার কাছে একই সমস্যা আছে @ এডরানডাল
জেরোস

231

ম্যাভেন সংস্করণ 3.2.1 এই বৈশিষ্ট্যটি যুক্ত হলে, আপনি ব্যবহার করতে পারেন -plসুইচ ( শর্টকাট জন্য --projectsসঙ্গে তালিকা) !বা -( উৎস নির্দিষ্ট submodules বাদ দেওয়ার)।

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

বাশ চরিত্রটিতে সাবধান! একটি বিশেষ চরিত্র, তাই আপনাকে হয় এটির একক উদ্ধৃতি দিতে হবে (যেমন আমি করেছি) বা ব্যাকস্ল্যাশ অক্ষর দিয়ে এড়িয়ে যেতে হবে।

একাধিক মডিউল বাদ দিতে সিনট্যাক্স অন্তর্ভুক্তির মতো

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

সম্পাদনা উইন্ডোজ একক উদ্ধৃতি পছন্দ করে না বলে মনে হয়, তবে এটি ব্যাশে প্রয়োজনীয়; উইন্ডোজে ডাবল কোট ব্যবহার করুন (ধন্যবাদ @ ওয়ালকিনসন)

mvn -pl "!submodule1,!submodule2" install

27
গুরুত্বপূর্ণ: আপনি যদি কোনও নেস্টেড সাবমডিউলটি বাদ দিতে চান তবে আপনাকে যোগ্য সংস্করণটি ব্যবহার করতে হবেmvn -pl !com.acme:nestedmodule1
লিওনার্ড ব্রানিংস

3
-Pl বিকল্প প্রয়োজন '[groupId]:' artifactId সামনে, তাই আমরা ব্যবহার করা উচিত mvn -pl: ইনস্টল 'submodule টু বাদ!'
Honsen

4
আপনি mvn -pl '!path/to/submodule/directory'গ্রুপআইডি এবং আর্টিফ্যাক্টআইডি ব্যবহার না করেও ব্যবহার করতে পারেন । আমার উত্তর কাজ করে submodule1এবং submodule2বর্তমান ডিরেক্টরিতে অবস্থিত হলে ।
আলেকজান্দ্রে ডুব্রেইল

এছাড়া মূল্য কিছুই যে আপনি যদি ব্যবহার করেন -plmvn install, আপনি সম্ভবত জন্য এটি ব্যবহার করতে হবে mvn deployপাশাপাশি
majikman

39

-plকমান্ড লাইন আর্গুমেন্ট নির্দিষ্ট করে কোন চুল্লি প্রকল্পগুলি তৈরি করতে হবে তা সিদ্ধান্ত নেওয়া সম্ভব :

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

এটি নিম্নলিখিত ফর্মগুলির একটিতে কমা দ্বারা পৃথক প্যারামিটারগুলির তালিকা গ্রহণ করে:

  • POM সমেত ফোল্ডারের আপেক্ষিক পথ
  • [groupId]:artifactId

সুতরাং, নিম্নলিখিত কাঠামো দেওয়া:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

আপনি নিম্নলিখিত কমান্ড লাইনটি নির্দিষ্ট করতে পারেন:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

সবকিছু তৈরি করতে। আপনি দয়া করে কেবলমাত্র মডিউলগুলি তৈরি করতে তালিকার উপাদানগুলিকে সরান।


সম্পাদনা করুন: ব্ল্যাকবিল্ড হিসাবে উল্লেখ করা হয়েছে, ম্যাভেন ৩.২.১-এর হিসাবে আপনার কাছে একটি নতুন -elপতাকা রয়েছে যা চুল্লী থেকে প্রকল্পগুলি বাদ দেয়, একইভাবে যা -plকরে:


2
ধন্যবাদ। এটি আমার পক্ষে ভাল কাজ করেছে। এছাড়াও মনে রাখবেন যে আপনি নির্দিষ্ট করেছেন মডিউলগুলির দ্বারা প্রয়োজনীয় প্রজেক্টগুলি বানাতে আপনি "-am" (একেএ "--এলসো মেক") যুক্ত করতে পারেন।
গাজেড

1
গ্রেট! আমি mvn install -pl .মডিউল তৈরি না করে কেবল স্থানীয় রেপোতে প্যারেন্ট পম ইনস্টল করার জন্য ব্যবহার করেছি ।
মার্সিন

এছাড়াও, jira.codehaus.org/browse/MNG-5230একবার দেখুন । আপনি এখন চুল্লি থেকে প্রকল্পগুলি বাদ দিতে পারেন।
ব্ল্যাক বিল্ড

1
কোডহাউস.আর.আরগ বন্ধ হওয়ার পর থেকে এমএনজি -২30৩০ লিঙ্ক: ইস্যু.পাছে.আর.জিরা
এড র্যান্ডাল

দুর্ভাগ্যক্রমে, এটি ট্রানজিটিভভাবে কাজ করে না, অর্থাত্ যদি আমার কাছে শীর্ষ / মোড 1 / মোড 2 থাকে এবং উপরে থেকে বিল্ড করা হয়, -pl '! Mod2' একটি ত্রুটি উত্থাপন করে।
জাকম্যাক

4

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

মনে করুন আপনার প্রকল্পটি এটির মতো কাঠামোযুক্ত:

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

project-root/pom.xmlসংজ্ঞায়িত মডিউল

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

ci/pom.xmlসংজ্ঞায়িত প্রোফাইলগুলি যেমন:

... 
<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
  </profile>
  <profile>
    <id>CI</id>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>false</skip>
       </configuration>
     </plugin>
  </profile>
</profiles>

এটির নামের প্রোফাইলটি CIসক্রিয় থাকা ব্যতীত এই মডিউলে মাভেন স্কিপিং পরীক্ষার ফলাফল হবে । আপনার সিআই সার্ভারটি কার্যকর করতে নির্দেশ দেওয়া উচিত mvn clean package -P CI। মাভেন ওয়েবসাইটটিতে প্রোফাইলিং প্রক্রিয়াটির গভীরতার ব্যাখ্যা রয়েছে


2

গর্তে এখন (1.1.1 সংস্করণ থেকে) 'স্কিপ' পতাকা রয়েছে।

সুতরাং আপনি যেমন কাজ করতে পারেন:

    <profile>
        <id>pit</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-maven</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

আপনার মডিউলে, এবং পিট এড়িয়ে যাবে

[তথ্য] --- পিটস্ট-মেভেন: ১.১.৩: মিউটেশন-কভারেজ (ডিফল্ট-ক্লিপ) @ মডিউল-সেলেনিয়াম --- [তথ্য]] স্কিপিং প্রকল্প

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