मैं प्लगइन में प्लगइन के लिए विभिन्न निष्पादन को परिभाषित करना चाहता हूं, मेरे मूल पोम का प्रबंधन और फिर बच्चे के पोम्स में चरणों में विशिष्ट निष्पादन को बाध्य करें। मैं प्लगइन इस्तेमाल किए गए प्लगइन और प्लगइन प्रबंधन के आधार पर असंगत व्यवहार देखता हूं।मैवेन प्लगइन के चरण में डिफ़ॉल्ट बाध्यकारी को ओवरराइड करने के लिए कैसे करें
इस पहले उदाहरण में प्लगइन प्रबंधन पैरेंट पोम में स्थित है, कंपाइलर प्लगइन के लिए 2 निष्पादन और एंट्रिन प्लगइन के लिए 2 निष्पादन को परिभाषित करता है।
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<name>master-pom</name>
<modelVersion>4.0.0</modelVersion>
<groupId>plugin.test</groupId>
<artifactId>master-pom</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.6</source>
<target>1.6</target>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
<execution>
<id>execution-2</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.5</source>
<target>1.5</target>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>execution-1</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="execution 1"/>
</target>
</configuration>
</execution>
<execution>
<id>execution-2</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="execution 1"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
और बच्चे पोम:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<name>build</name>
<modelVersion>4.0.0</modelVersion>
<groupId>plugin.test</groupId>
<artifactId>build</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>plugin.test</groupId>
<artifactId>master-pom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>./master-pom.xml</relativePath>
</parent>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
बच्चे पोम पर चल रहा है 'स्वच्छ स्थापित mvn' संकलक प्लगइन के दोनों सज़ाएँ और केवल 1 निष्पादन चलेंगे एंट्रिन प्लगइन का, हालांकि प्रत्येक का केवल पहला निष्पादन एक चरण से बंधे थे।
अब बच्चे पोम को pluginManagement चलती:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<name>build</name>
<modelVersion>4.0.0</modelVersion>
<groupId>plugin.test</groupId>
<artifactId>build</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.6</source>
<target>1.6</target>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
<execution>
<id>execution-2</id>
<phase>none</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.5</source>
<target>1.5</target>
<includes>
<include>**/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>execution-1</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="execution 1"/>
</target>
</configuration>
</execution>
<execution>
<id>execution-2</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="execution 2"/>
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>execution-1</id>
<phase>generate-sources</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
यह पोम वांछित व्यवहार जो प्रत्येक प्लगइन के लिए केवल 1 निष्पादन चल रहा है देता है। कंपाइलर प्लगइन (और अधिकांश अन्य) केवल उस मामले में सही तरीके से काम करते हैं जहां प्लगइन प्रबंधन उसी पोम में स्थित होता है और प्रत्येक निष्पादन चरण = किसी के लिए बाध्य नहीं होता है (संभवतः क्योंकि यह डिफ़ॉल्ट चरण में निष्पादन को बांधता है)। एंटर प्लगइन किसी भी मामले में सही तरीके से काम करता है।
प्लगइन होने के दौरान मैं इसे कैसे प्राप्त कर सकता हूं माता-पिता पोम में प्रबंधन अनुभाग और विशेष रूप से अवांछित निष्पादन को चरण = किसी भी बच्चे के पोम्स में बाध्य नहीं कर सकता? क्या यह मेवेन में एक बग है या यह व्यवहार किसी तरह से उचित है? मैंने उसी परिणाम के साथ मेवेन 3.0.4 और मेवेन 2.2.1 पर यह कोशिश की है।
मैंने आपके पहले सेटअप की कोशिश की और मेरे पास केवल कंपाइलर और एंटर प्लगइन दोनों के लिए 'निष्पादन -1' था। आप कह रहे हैं कि कंपाइलर प्लगइन 'निष्पादन -1' और 'निष्पादन -2' दोनों चला गया। जैसा कि मैंने कहा, यह मेरे साथ नहीं हुआ। – maba
आप सही हैं। यह चाल चरण = किसी भी प्लगइन को जोड़ने के लिए है जो डिफ़ॉल्ट रूप से बाध्य होती है। मैंने इसे जोड़ने के बाद अपने माता-पिता को स्थानीय रेपो में तैनात नहीं किया, इसलिए मैं पुराने माता-पिता का उपयोग करने की कोशिश कर रहा था। –