प्लगइन्स और निर्भरता बहुत अलग चीजें हैं और ये पूरक हैं।
क्या प्लगइन्स हैं?
प्लगइन्स एक मावेन बिल्ड के लिए कार्य करते हैं। ये एप्लिकेशन में पैक नहीं किए गए हैं।
ये मावेन के दिल हैं।
मावेन द्वारा निष्पादित किसी भी कार्य को प्लगइन्स द्वारा निष्पादित किया जाता है ।
: वहाँ प्लग इन की दो श्रेणियां हैं और प्लग-इन :buildreporting
- बिल्ड प्लगइन्स को बिल्ड के दौरान निष्पादित किया जाएगा और उन्हें
<build/>पोम से तत्व में कॉन्फ़िगर किया जाना चाहिए ।
- साइट प्लगइन्स के दौरान रिपोर्टिंग प्लगइन्स निष्पादित किए जाएंगे और उन्हें
<reporting/POM से तत्व में कॉन्फ़िगर किया जाना चाहिए ।
कमांड लाइन (उदाहरण के लिए mvn clean, mvn clean packageया mvn site) में निर्दिष्ट मावेन लक्ष्य के अनुसार , एक विशिष्ट जीवन शैली का उपयोग किया जाएगा और प्लगइन्स लक्ष्यों के एक विशिष्ट सेट को निष्पादित किया जाएगा।
वहाँ तीन में निर्मित निर्माण lifecycles हैं: default, cleanऔर site। defaultजीवन चक्र अपनी परियोजना तैनाती संभालती है, cleanजीवन चक्र हैंडल सफाई परियोजना है, जबकि siteजीवन चक्र हैंडल अपने प्रोजेक्ट की साइट प्रलेखन का निर्माण।
एक प्लगइन लक्ष्य एक विशिष्ट जीवन शैली के एक विशिष्ट चरण के लिए बाध्य हो सकता है।
उदाहरण के लिए जीवनचक्र चरण maven-compiler-pluginमें compileलक्ष्य को डिफ़ॉल्ट रूप से बांधता है compile:।
अधिकांश मावेन प्लगइन्स (दोनों कोर प्लगइन्स और थर्ड पार्टी प्लगइन्स) कॉन्फ़िगरेशन पर पक्ष सम्मेलन करते हैं। इसलिए ये आम तौर पर अपने उपयोग को सरल बनाने के लिए एक विशिष्ट चरण के लिए एक प्लगइन लक्ष्य को बाध्य करते हैं।
यह शून्य और कम त्रुटि प्रवण है:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
से अधिक:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
निर्भरता क्या हैं?
निर्भरताएं मावेन बिल्ड के दौरान क्लासपाथ में आवश्यक मावेन कलाकृतियां / घटक हैं।
इन्हें एप्लिकेशन में पैक किया जा सकता है लेकिन आवश्यक नहीं ( scopeनीचे देखें)।
अधिकांश निर्भरताएं जार हैं लेकिन ये अन्य प्रकार के अभिलेखागार भी हो सकते हैं: युद्ध, कान, परीक्षण-जार, ईजेबी-क्लाइंट ... या अभी भी पोम या बीओएम।
Pom.xml में, कई स्थानों पर निर्भरताएं निर्दिष्ट की जा सकती हैं: <build><dependencies>भाग, dependencies managementभाग या अभी भी एक pluginघोषणा में ! वास्तव में कुछ प्लगइन्स को उनके निष्पादन के दौरान क्लासपाथ में कुछ निर्भरताएं रखने की आवश्यकता हो सकती है। यह आम नहीं है लेकिन ऐसा हो सकता है।
यहाँ प्रलेखन से एक उदाहरण है जो दिखाता है कि pluginऔर dependencyएक साथ काम कर सकते हैं:
उदाहरण के लिए, मावेन एंट्रॉन प्लगिन संस्करण 1.2 चींटी संस्करण 1.6.5 का उपयोग करता है, यदि आप इस प्लगइन को चलाते समय नवीनतम चींटी संस्करण का उपयोग करना चाहते हैं, तो आपको <dependencies>निम्नलिखित जैसे तत्व जोड़ना होगा :
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
...
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-launcher</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
...
</project>
मावेन में, निर्भरताएँ एक विशिष्ट प्रारूप में संदर्भित की जाती हैं
groupId:artifactId:packaging:classifier:version:।
क्लासिफ़ायर (जो वैकल्पिक है) और पैकेजिंग ( JARडिफ़ॉल्ट रूप से) आमतौर पर निर्दिष्ट नहीं होती हैं। तो में आम प्रारूप dependencyघोषणा नहीं बल्कि यह है: groupId:artifactId:version।
यहाँ <build><dependencies>भाग में घोषित निर्भरता का एक उदाहरण दिया गया है :
<build>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.14.Final</version>
</dependency>
<dependencies>
</build>
एक प्लगइन के विपरीत, एक निर्भरता में एक गुंजाइश है।
डिफ़ॉल्ट स्कोप है compile। यह सबसे अधिक आवश्यक गुंजाइश है (फिर से विन्यास पर सम्मेलन)। गुंजाइश मतलब यह है कि निर्भरता एक परियोजना के सभी classpaths में उपलब्ध है।
compile
गुंजाइश परिभाषित करती है कि किस वर्ग में निर्भरता को जोड़ा जाना चाहिए। उदाहरण के लिए हमें संकलन और रनटाइम पर इसकी आवश्यकता है, या केवल परीक्षण संकलन और निष्पादन के लिए?
उदाहरण के लिए हमने पहले हाइबरनेट को एक compileनिर्भरता के रूप में परिभाषित किया है क्योंकि हमें हर जगह इसकी आवश्यकता है: स्रोत संकलन, परीक्षण संकलन, रनटाइम और इसलिए ....
लेकिन हम नहीं चाहते हैं कि परीक्षण पुस्तकालयों को आवेदन में पैक किया जाए या स्रोत कोड में संदर्भित किया जाए। । इसलिए हम testउनके लिए गुंजाइश निर्दिष्ट करते हैं:
<build>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
<dependencies>
</build>