เป็นไปได้หรือไม่ที่จะลบล้างการกำหนดค่าของปลั๊กอินที่กำหนดไว้แล้วสำหรับโปรไฟล์ใน POM หลัก


110

ในไฟล์พาเรนต์ POM ของโปรเจ็กต์ของฉันฉันมีโปรไฟล์ที่กำหนดคอนฟิกูเรชันบางอย่างที่เป็นประโยชน์สำหรับโปรเจ็กต์นี้ (ดังนั้นฉันจึงไม่สามารถกำจัด 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>

แต่ในโครงการของฉันฉันแค่อยากจะแทนที่การกำหนดค่าของ maven-compiler-plugin เพื่อใช้ jdk5 แทน jdk4 สำหรับการรวบรวมคลาสทดสอบ

นั่นเป็นเหตุผลที่ฉันทำส่วนนี้ใน POM ของโครงการของฉัน:

<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>

และมันไม่ทำงาน ...

ฉันยังพยายามแทนที่การกำหนดค่าในส่วนปลั๊กอินปกติของ POM ของฉัน (ฉันหมายถึงไม่ใช่สำหรับโปรไฟล์เฉพาะ แต่สำหรับ POM ทั้งหมดของฉัน)

อะไรคือปัญหา?

เพื่อชี้แจงข้อกำหนดบางประการของฉัน:

  • ฉันไม่ต้องการกำจัด POM หลักและโปรไฟล์ (wls7) ที่กำหนดไว้ภายใน (เนื่องจากฉันต้องการคุณสมบัติการกำหนดค่า ... ) และนั่นไม่ใช่กระบวนการใน บริษัท ของฉัน
  • วิธีแก้ปัญหาที่ขึ้นอยู่กับการทำซ้ำ POM แม่และ / หรือโปรไฟล์ที่กำหนดไว้ภายในนั้นไม่ใช่วิธีที่ดี เนื่องจากหากผู้รับผิดชอบของ
    POM ผู้ปกครองเปลี่ยนแปลงบางสิ่งฉัน
    จะต้องรายงานในของฉัน

มันเป็นเพียงเรื่องการสืบทอด (ขยายหรือแทนที่โปรไฟล์การกำหนดค่าจาก POM ระดับบน) ดังนั้นฉันคิดว่ามันน่าจะเป็นไปได้กับ Maven 2


โปรไฟล์ wls7 เปิดใช้งานอย่างไร
Pascal Thivent

โปรไฟล์ wls7 และ wls10 มีทั้ง "activeByDefault" ใน POM หลัก แต่ตามความต้องการของลูกค้ามีเพียง wls10 หรือทั้งสองอย่างเท่านั้นที่สร้างขึ้นโดยสคริปต์ (โดยมีพารามิเตอร์ "-P")
Guillaume Cernier

คำตอบ:


145

การลบล้างการกำหนดค่าจากแม่ปอมสามารถทำได้โดยการเพิ่มcombine.self="override"แอตทริบิวต์ให้กับองค์ประกอบใน pom ของคุณ

ลองเปลี่ยนการกำหนดค่าปลั๊กอินของคุณเป็น:

    <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


ดูเหมือนว่าสำหรับ Maven2.2.1 หากคุณทำสิ่งนี้ในโปรไฟล์จะไม่รวมกับปลั๊กอินที่กำหนดไว้ในโปรไฟล์หลัก แต่จะลบล้างสิ่งเหล่านี้ หากคุณกำหนดปลั๊กอินเดียวกันโดยตรงในส่วนการสร้างก็ใช้ได้ สำหรับ Maven3 ก็แก้ไขได้ตามที่คาดไว้
Greg Domjan

มันไม่ได้ผลสำหรับฉัน ฉันต้องการสร้าง Jenkins NodeJS Plugin v1.0 ใหม่ด้วยเวอร์ชัน 1.580.1 ของ org.jenkins-ci.plugins ใน pom.xml โดยใช้ Maven 3.3.9 จนกว่าฉันจะเปลี่ยน <source> เป็น 1.7 ด้วยตนเองใน ~ / .m2 / repository / org / jenkins-ci / jenkins / 1.34 / jenkins-1.34.pom ก็ไม่มีอะไรทำงาน
Alexander Samoylov

6

ฉันมีปัญหาเดียวกัน โดยค่าเริ่มต้นปลั๊กอิน maven war ของฉันไม่รวมไฟล์ html แต่ในโปรไฟล์การทดสอบการยอมรับของฉันฉันต้องการรวมไฟล์นี้ ดังนั้นเมื่อฉันเพิ่มในปลั๊กอิน maven war อีกครั้งมันไม่ได้แทนที่ค่าเริ่มต้น

ในการแก้ไขปัญหานี้ฉันได้ส่งผ่านแอตทริบิวต์ combination.self และใช้งานได้ดี

สร้างเริ่มต้น:

<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

คุณพยายามปิดใช้งานโปรไฟล์ wls7 หรือไม่ (ตั้งแต่ maven 2.0.10):

เริ่มต้นด้วย Maven 2.0.10 สามารถปิดการใช้งานโปรไฟล์อย่างน้อยหนึ่งโปรไฟล์โดยใช้บรรทัดคำสั่งโดยนำหน้าตัวระบุด้วยอักขระ '!' หรือ '-' ตามที่แสดงด้านล่าง:

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

สามารถใช้เพื่อปิดใช้งานโปรไฟล์ที่ทำเครื่องหมายว่า activeByDefault หรือโปรไฟล์ที่จะเปิดใช้งานผ่านการกำหนดค่าการเปิดใช้งาน

จากนั้นเพิ่มการกำหนดค่าของคุณในโปรไฟล์ด้วยชื่ออื่นหรือโดยตรงในpom.xmlไฟล์.


ดังที่ฉันได้กล่าวไว้ข้างต้นฉันไม่สามารถกำจัด POM หลักได้เนื่องจากฉันสืบทอดการกำหนดค่ามากมายที่กำหนดไว้สำหรับ บริษัท ทั้งหมดของฉันในระดับต่างๆในกรอบงาน และการทำซ้ำโปรไฟล์ไม่ควรเป็นความคิดที่ดีเพราะฉันจะต้องรายงานการเปลี่ยนแปลงใน POM หลักและบ่อยครั้งที่ฉันไม่รู้ตัว ฉันแค่อยากจะลบล้างพฤติกรรมสำหรับการรวบรวมคลาสทดสอบในโครงการของฉันเท่านั้น
Guillaume Cernier

อ่านคำตอบของฉันอีกครั้งนั่นไม่ใช่สิ่งที่ฉันแนะนำ ฉันแนะนำให้ปิดการใช้งานโปรไฟล์ไม่ใช่เพื่อกำจัด POM หลัก แล้วทำไมต้องแจ้งเปลี่ยนแปลงแม่ปอมด้วยล่ะ? ไม่มีอะไรบังคับให้คุณทำอย่างนั้น
Pascal Thivent

ใช่ Pascal ขอบคุณสำหรับความช่วยเหลือของคุณ แต่ปัญหาคือถ้าฉันปิดใช้งานโปรไฟล์ wls7 ฉันจะกำจัดการกำหนดค่าจำนวนมาก (สำหรับปลั๊กอินอื่น ๆ , maven ทั่วไป, ... ) ฉันยังต้องการ และด้วยการรายงานการเปลี่ยนแปลงฉันหมายถึงจาก POM แม่ถึง POM ของฉัน เนื่องจากด้วยวิธีการแก้ปัญหาที่คุณแนะนำฉันจะต้องทำซ้ำ POM แม่ทั้งหมด (ยกเว้นส่วนสำหรับการรวบรวมคลาสทดสอบ) และหาก POM หลักที่รับผิดชอบเปลี่ยนแปลงบางสิ่งใน POM ของเขาฉันต้องได้รับคำเตือนถึงการเปลี่ยนแปลงใด ๆ ซึ่งก็คือ ไม่ใช่กระบวนการปัจจุบันและไม่สามารถใช้งานได้จริง
Guillaume Cernier

โอเคฉันเข้าใจแล้ว อย่างไรก็ตามฉันไม่แน่ใจ (แต่ฉันอาจจะคิดผิด) คุณสามารถแทนที่ pom ได้บางส่วนดังนั้นฉันจึงไม่มีวิธีแก้ปัญหาที่ดีกว่านี้กับรายละเอียดที่ให้มา
Pascal Thivent

อย่างไรก็ตามขอบคุณมาก Pascal ที่พยายามช่วยฉัน อันที่จริงฉันต้องการพฤติกรรมเช่นนี้เพราะเหตุผลบางอย่าง อาจมีวิธีอื่นในการแสดง:
Guillaume Cernier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.