ปิดการใช้งาน Maven ปลั๊กอินกำหนดไว้ใน POM ผู้ปกครอง


158

ฉันกำลังใช้ POM แม่ที่กำหนดปลั๊กอินที่ฉันไม่ต้องการให้เรียกใช้ใน POM ลูก ฉันจะสามารถปิดการใช้งานปลั๊กอินใน pom เด็กสมบูรณ์หรือไม่

ข้อ จำกัด : ฉันไม่สามารถเปลี่ยน POM ของผู้ปกครองเองได้

คำตอบ:


205

งานต่อไปนี้สำหรับฉันเมื่อปิดใช้งาน Findbugs ใน POM เด็ก:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>ID_AS_IN_PARENT</id> <!-- id is necessary sometimes -->
            <phase>none</phase>
        </execution>
    </executions>
</plugin>

หมายเหตุ: คำจำกัดความเต็มรูปแบบของปลั๊กอิน Findbugs อยู่ใน parent / super POM ของเราดังนั้นมันจะสืบทอดเวอร์ชันและอื่น ๆ

ใน Maven 3 คุณจะต้องใช้:

 <configuration>
      <skip>true</skip>
 </configuration>

สำหรับปลั๊กอิน


8
ในขณะที่นี่คือ "ถูกต้อง" คือมันทำงานมันควรจะสังเกตว่ามันเป็นคุณสมบัติที่ไม่ระบุ (หรืออย่างน้อยไม่มีเอกสาร ) ไม่มีเฟสอย่างเป็นทางการที่เรียกว่า 'ไม่มี' ดังนั้นคุณอาจวาง 'foo' ไว้ที่นั่นด้วย
มาร์เซล STOR

1
สำหรับฉันใน Maven 3 สิ่งนี้ไม่ทำงาน <skip> จริง </skip> เช่นงานแนะนำ
bmargulies

10
ฉันต้องเพิ่ม<id>…</id>ส่วนของ POM หลักจากนั้นก็ใช้งานได้สำหรับฉัน
mirabilos

4
วิธีการแก้ปัญหา Maven 3 ไม่ได้ปิดการใช้งานปลั๊กอินจริง ๆ ใช่ไหม? ปลั๊กอินยังคงทำงานอยู่ ไม่ว่าจะเป็นไปตามการกำหนดค่าข้ามหรือไม่และวิธีการ / สิ่งที่เลือกจะข้ามดูเหมือนว่าจะขึ้นอยู่กับแต่ละปลั๊กอิน
Zero3

10
ความคิดเห็นของ mirabilos เป็นคำตอบที่ถูกต้องสำหรับ Maven 3 และสามารถพกพาข้ามปลั๊กอินทั้งหมดได้ ปลั๊กอินบางตัวเท่านั้นที่มี<skip>พารามิเตอร์
Gili

60

ดูว่าปลั๊กอินนั้นมีพารามิเตอร์การกำหนดค่า 'ข้าม' หรือไม่ เกือบทั้งหมดทำได้ ถ้าเป็นเช่นนั้นเพียงแค่เพิ่มลงในการประกาศในเด็ก:

<plugin>
   <groupId>group</groupId>
   <artifactId>artifact</artifactId>
   <configuration>
     <skip>true</skip>
   </configuration>
</plugin>

ถ้าไม่ใช้ให้ใช้:

<plugin>    
<groupId>group</groupId>   
 <artifactId>artifact</artifactId>    
<executions>
     <execution>
       <id>TheNameOfTheRelevantExecution</id>
       <phase>none</phase>
     </execution>    
</executions>  
</plugin>

วิธีการเกี่ยวกับการตั้งชื่อปลั๊กอินที่คุณใช้งานและการช่วยเหลือ: มีประสิทธิภาพ pom เพื่อดูว่าคุณมีการดำเนินการที่ถูกต้องจริงๆ
bmargulies

1
นอกจากนี้ระวังปลั๊กอินและปลั๊กอินการจัดการ ภายหลังแทนที่อดีต
bmargulies

ฉันใช้ปลั๊กอิน Cobertura และฉันไม่ต้องการเรียกใช้ใน pom ลูก
tobiasbayer

เป้าหมายการตรวจสอบมีข้ามใน 2.5 มันไม่ได้มาก่อน เป้าหมาย Cobertura ไม่
bmargulies

ฉันไม่ต้องการข้ามเพียงตรวจสอบ แต่การดำเนินการปลั๊กอินทั้งหมด
tobiasbayer

37

เธรดเก่า แต่อาจมีบางคนที่สนใจ รูปแบบที่สั้นที่สุดที่ฉันพบคือการปรับปรุงตัวอย่างจากλlexและ bmargulies แท็กการดำเนินการจะมีลักษณะดังนี้:

<execution>
    <id>TheNameOfTheRelevantExecution</id>
    <phase/>
</execution>

2 คะแนนฉันต้องการเน้น:

  1. เฟสถูกตั้งค่าเป็นไม่มีอะไรซึ่งดูว่าแฮ็คน้อยกว่า 'ไม่มี' แม้ว่าจะยังแฮ็กอยู่
  2. id ต้องเหมือนกับการดำเนินการที่คุณต้องการแทนที่ หากคุณไม่ได้ระบุ ID สำหรับการดำเนินการ Maven จะทำโดยปริยาย (ในแบบที่คุณไม่คาดคิดโดยสัญชาตญาณ)

หลังจากโพสต์พบว่ามันมีอยู่แล้วใน stackoverflow: ในโครงการ Maven หลายโมดูลฉันจะปิดการใช้งานปลั๊กอินในเด็ก ๆ ได้อย่างไร?


1
สำหรับเร็กคอร์ด: รหัสการเรียกใช้เริ่มต้นปฏิบัติตามกฎง่าย ๆ ที่วางไว้ในคำตอบนี้: stackoverflow.com/a/34599117/7641
Jens Bannmann

2
เป็นที่น่าสังเกตว่าโซลูชันนี้ปิดใช้งานจริง(ตามที่ OP ขอ) ปลั๊กอิน (สำหรับรหัสการเรียกใช้ที่กำหนด) แทนที่จะใช้ตัวเลือก "ข้าม" เฉพาะปลั๊กอิน
Zero3

3

ฉันรู้ว่ากระทู้นี้เก่ามาก แต่โซลูชันจาก @Ivan Bondarenko ช่วยฉันในสถานการณ์ของฉัน

pom.xmlฉันมีต่อไปนี้ในของฉัน

<build>
    ...
    <plugins>
         <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <execution>
                        <id>generate-citrus-war</id>
                        <goals>
                            <goal>test-war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    </plugins>
</build>

สิ่งที่ฉันต้องการคือการปิดการใช้งานการดำเนินการgenerate-citrus-warสำหรับโปรไฟล์ที่เฉพาะเจาะจงและนี่คือทางออก:

<profile>
    <id>it</id>
    <build>
        <plugins>
            <plugin>
                <groupId>com.consol.citrus</groupId>
                <artifactId>citrus-remote-maven-plugin</artifactId>
                <version>${citrus.version}</version>
                <executions>
                    <!-- disable generating the war for this profile -->
                    <execution>
                        <id>generate-citrus-war</id>
                        <phase/>
                    </execution>

                    <!-- do something else -->
                    <execution>
                        ...
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.