প্যারেন্ট POM এ প্রোফাইলের জন্য ইতিমধ্যে সংজ্ঞায়িত প্লাগইন কনফিগারেশন ওভাররাইড করা সম্ভব?


109

আমার প্রকল্পের একটি পম প্যারেন্ট ফাইলে আমার কাছে এমন একটি প্রোফাইল রয়েছে যা এই প্রকল্পের জন্য দরকারী কিছু কনফিগারেশন সংজ্ঞায়িত করে (যাতে আমি এই প্যারেন্ট POM থেকে মুক্তি পেতে পারি না):

<profile>
<id>wls7</id>
...
<build>
  <plugins>
    <!-- use java 1.4 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <fork>true</fork>
        <source>1.4</source>
        <target>1.4</target>
        <meminitial>128m</meminitial>
        <maxmem>1024m</maxmem>
        <executable>%${jdk14.executable}</executable>
      </configuration>
    </plugin>
  </plugins>
</build>

...
</profile>

তবে আমার প্রকল্পে আমি টেস্ট-ক্লাস সংকলনের জন্য jdk4 এর পরিবর্তে jdk5 ব্যবহার করার জন্য মাভেন-কম্পাইলার-প্লাগইন কনফিগারেশনকে ওভাররাইড করতে চাই।

এই কারণেই আমি আমার প্রকল্পের পিওএম-এ এই বিভাগটি করেছি:

<profiles>
  <profile>
    <id>wls7</id>
        <activation>
            <property>
                <name>jdk</name>
                <value>4</value>
            </property>
        </activation>
    <build>
      <directory>target-1.4</directory>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <executions>
            <execution>
              <id>my-testCompile</id>
              <phase>test-compile</phase>
              <goals>
                <goal>testCompile</goal>
              </goals>
              <configuration>
                <fork>true</fork>
                <executable>${jdk15.executable}</executable>
                <compilerVersion>1.5</compilerVersion>
                <source>1.5</source>
                <target>1.5</target>
                <verbose>true</verbose>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
              ...
</profiles>

এবং এটি কাজ করছে না ...

এমনকি আমি আমার পিওএমের নিয়মিত প্লাগইন বিভাগে কনফিগারেশনটি ওভাররাইড করার চেষ্টা করেছি (আমি বোঝাতে চাইছি একটি নির্দিষ্ট প্রোফাইলের জন্য নয় তবে আমার পুরো পোমের জন্য)।

কি সমস্যা হতে পারে ?

আমার কিছু প্রয়োজনীয়তা পরিষ্কার করতে:

  • আমি প্যারেন্ট পিওএম এবং এর ভিতরে সংজ্ঞায়িত প্রোফাইল (ডাব্লুএলএস 7) থেকে মুক্তি পেতে চাই না (যেহেতু আমার অনেকগুলি এবং অনেক সম্পত্তি, কনফিগারেশন, ... প্রয়োজন) এবং এটি আমার সংস্থার প্রক্রিয়া নয়।
  • প্যারেন্ট POM এবং / অথবা এর ভিতরে সংজ্ঞায়িত প্রোফাইলের সদৃশ করার ভিত্তিতে একটি সমাধান ভাল নয়। যেহেতু
    প্যারেন্ট পুমের দায়িত্বশীলরা যদি কিছু পরিবর্তন করেন তবে আমাকে
    এটি আমার কাছে রিপোর্ট করতে হবে।

এটি কেবলমাত্র উত্তরাধিকারের বিষয় (কোনও প্রোফাইল প্রসারিত বা ওভাররাইড করুন, একটি উচ্চ স্তরের POM থেকে একটি কনফিগারেশন) সুতরাং আমি মনে করি মাভেন 2 এর মাধ্যমে এটি সম্ভব হওয়া উচিত।


কীভাবে ডাব্লুএলএস 7 প্রোফাইল সক্রিয় হয়?
পাস্কাল থিভেন্ট

প্রোফাইলগুলি ডাব্লুএলএস 7 এবং ডাব্লুএলএস 10 উভয়ই প্যারেন্ট পিওমে "অ্যাক্টিভবাইডিফল্ট"। কিন্তু গ্রাহকের চাহিদা, শুধুমাত্র wls10 বা উভয় ( "-P" প্যারামিটারটি সঙ্গে) স্ক্রিপ্ট দ্বারা নির্মিত হয় অনুযায়ী
Guillaume, Cernier

উত্তর:


144

কোনও প্যারেন্ট পম থেকে ওভাররাইড কনফিগারেশনগুলি combine.self="override"আপনার পোমের উপাদানটিতে অ্যাট্রিবিউট যুক্ত করে করা যেতে পারে ।

আপনার প্লাগইন কনফিগারেশন এতে পরিবর্তন করার চেষ্টা করুন:

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <executions>
        <execution>
          <id>my-testCompile</id>
          <phase>test-compile</phase>
          <goals>
            <goal>testCompile</goal>
          </goals>
          <configuration combine.self="override">
            <fork>true</fork>
            <executable>${jdk15.executable}</executable>
            <compilerVersion>1.5</compilerVersion>
            <source>1.5</source>
            <target>1.5</target>
            <verbose>true</verbose>
          </configuration>
        </execution>
      </executions>
    </plugin>

ওভাররাইডিং প্লাগইন সম্পর্কিত আরও তথ্যের জন্য, দেখুন: http://maven.apache.org/pom.html


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

এটা আমার জন্য কাজ করে নি। আমি ম্যাভেন ৩.৩.৯ ব্যবহার করে pom.xML এ org.jenkins-ci.plugins এর 1.580.1 সংস্করণ সহ জেনকিনস নোডজেএস প্লাগিন ভি 1.0 পুনরায় তৈরি করতে চেয়েছিলাম। যতক্ষণ না আমি ম্যানুয়ালি s / .m2 / সংগ্রহস্থল / org / জেনকিনস-সিআই / জেনকিনস / 1.34 / জেনকিন্স-1.34.pom এ <সোর্স> 1.1 এ পরিবর্তন করেছি।
আলেকজান্ডার সাময়লভ

6

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

এই সমস্যাটি সমাধান করার জন্য আমি কম্বাইন.সেলফ অ্যাট্রিবিউটে পাস করেছি এবং দুর্দান্ত কাজ করেছি।

ডিফল্ট বিল্ড:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <packagingExcludes>swagger-ui/client.html</packagingExcludes>
    </configuration>
</plugin>

স্বীকৃতি পরীক্ষা প্রোফাইল:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration combine.self="override"/>
</plugin>

1

আপনি কি ডাব্লুএলএস 7 প্রোফাইল নিষ্ক্রিয় করার চেষ্টা করেছিলেন (যেহেতু মেইন 2.0.10):

মাভেন ২.০.১০ থেকে শুরু করে, এক বা একাধিক প্রোফাইল তাদের চিহ্নিতকারীকে 'অক্ষর' দিয়ে পূর্বনির্ধারিত করে কমান্ড লাইন ব্যবহার করে নিষ্ক্রিয় করা যেতে পারে! ' বা '-' নীচে প্রদর্শিত হিসাবে:

mvn groupId:artifactId:goal -P !profile-1,!profile-2

এটি অ্যাক্টিভবাইডিফল্ট হিসাবে চিহ্নিত প্রোফাইলগুলি বা অন্যথায় তাদের অ্যাক্টিভেশন কনফিগারেশনের মাধ্যমে সক্রিয় করা হবে এমন প্রোফাইলগুলি নিষ্ক্রিয় করতে ব্যবহার করা যেতে পারে।

এবং তারপরে আপনার কনফিগারেশনটি কোনও অন্য নামের সাথে কোনও প্রোফাইলে যুক্ত করুন বা সরাসরি আপনার pom.xml


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

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

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

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

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