Apache Maven
एक Maven प्लगइन बनाएँ
खोज…
परिचय
मावेन आपको कस्टम प्लगइन्स को लागू करने और उपयोग करने की अनुमति देता है। ये प्लगइन्स अतिरिक्त व्यवहार को मावेन जीवन चक्र के किसी भी चरण के लिए बाध्य करने की अनुमति देते हैं।
प्रत्येक मावेन लक्ष्य एक एमओजेओ (मावेन ऑर्डिनरी जावा ऑब्जेक्ट) को लागू करके बनाया गया है: एक जावा वर्ग एनोटेशन के साथ लागू किया गया है जो बताता है कि इसे कैसे लागू किया जाए।
किसी प्लगइन का लक्ष्य उपसर्ग उसके विरूपण साक्ष्य नाम से लिया गया है। एक विरूपण साक्ष्य hello-world-plugin
एक लक्ष्य उपसर्ग hello-world
बनाता है। hello
गोल तब mvn hello-world:hello
साथ चलाया जा सकता है।
टिप्पणियों
एक मावेन प्लगइन एक JAR है जिसमें एक मावेन maven/plugins.xml
है जो प्लगइन मेटाडेटा का वर्णन करता है। यह फ़ाइल maven-plugin-plugin
द्वारा बनाई गई है।
एक मावेन विरूपण साक्ष्य को मावेन प्लगइन के रूप में घोषित करना
मावेन द्वारा निर्मित एक कलाकृति को पैकेजिंग को pom.xml
में मावेन maven-plugin
रूप में निर्दिष्ट करके मावेन प्लगइन के रूप में घोषित किया जा सकता है।
<packaging>maven-plugin</packaging>
आपको प्लगइन एपीआई और एनोटेशन पर निर्भरता की घोषणा करने की आवश्यकता है।
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.3.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
मेटाडेटा जनरेट करने के लिए आपको एक प्लगइन जोड़ने की आवश्यकता है।
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.5</version>
</plugin>
एक लक्ष्य बनाना
MOJO बनाकर लक्ष्यों को लागू किया जाता है। यह maven-plugin-annotations
से एनोटेशन के साथ एनोटेट की गई एक क्लास फाइल है।
@Mojo(name = "hello")
public final class HelloWorldMojo extends AbstractMojo {
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello world");
}
}
प्लगइन विन्यास का उपयोग करना
प्लगइन्स को @Parameter
साथ फ़ील्ड एनोटेट करके कॉन्फ़िगर किया जा सकता है। MOJO को तब कॉन्फ़िगरेशन के साथ इंजेक्ट किया जाता है।
@Mojo(name = "greet")
public final class GreetMojo extends AbstractMojo {
@Parameter(required = true)
public String name;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello " + name);
}
}
name
पैरामीटर POM में कॉन्फ़िगर किया जा सकता है:
<plugin>
<groupId>com.mattunderscore</groupId>
<artifactId>hello-world-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<name>Matt</name>
</configuration>
</plugin>
यदि greet
लक्ष्य को स्टैंडअलोन लक्ष्य के रूप में चलाया जाता है तो name
पैरामीटर को कमांड लाइन पर संपत्ति के रूप में परिभाषित किया जा सकता है:
mvn <plugin name>:greet -Dname=Geri
प्रोजेक्ट की जानकारी एक्सेस करना
प्लगइन, अन्य लोगों के बीच, वर्तमान मावेन परियोजना के निर्माण के बारे में जानकारी का उपयोग कर सकता है।
@Mojo(name = "project")
public final class ProjectNameMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
public void execute() throws MojoExecutionException, MojoFailureException {
getLog().info("Hello, this is " + project.getName());
}
}
उपरोक्त उदाहरण कंसोल में उस पर चलाए जाने वाले मावेन प्रोजेक्ट के नाम को प्रिंट करेगा, जो इसके POM के <project>/<name>
एलिमेंट में निर्दिष्ट है।
प्लगइन में प्रयुक्त MavenProject
क्लास को प्लगइन के POM में एक डिफ़ॉल्ट (डिफ़ॉल्ट) compile
गुंजाइश के साथ MavenProject
maven-core
की निर्भरता की आवश्यकता होती है:
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.3.9</version>
</dependency>
इसके अलावा, एनोटेशन का उपयोग करने के लिए प्लगइन के पोम में निम्नलिखित निर्भरता की आवश्यकता होती है:
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope> <!-- annotations are needed only to build the plugin -->
</dependency>
किसी लक्ष्य के लिए एक डिफ़ॉल्ट चरण घोषित करें
@Mojo(name = "hi", defaultPhase = LifecyclePhase.COMPILE)
एक फ़ाइल के रूप में निर्माण निर्देशिका प्राप्त करें
@Parameter(defaultValue = "${project.build.directory}")
private File buildDirectory;