1.1 मावेन में बनाने के लिए प्लगइन्स की सूची

मावेन में असेंबली को बहुत लचीले ढंग से कॉन्फ़िगर किया जा सकता है। मावेन डेवलपर्स ने विशेष रूप से दर्जनों प्लगइन्स बनाए हैं, जिनका उपयोग करके आप बहुत ही लचीले ढंग से विभिन्न बिल्ड को कॉन्फ़िगर कर सकते हैं। उनमें से सबसे लोकप्रिय नीचे दी गई तालिका में दिखाए गए हैं:

लगाना विवरण
1 मेवेन-कंपाइलर-प्लगइन जावा संकलन का प्रबंधन करता है
2 मावेन-संसाधन-प्लगइन एक असेंबली में संसाधनों को शामिल करने को नियंत्रित करता है
3 मावेन स्रोत प्लगइन नियंत्रित करता है कि असेंबली में स्रोत कोड शामिल है या नहीं
4 मावेन-निर्भरता-प्लगइन निर्भरता पुस्तकालयों की प्रतिलिपि बनाने की प्रक्रिया को नियंत्रित करता है
5 maven-जार-प्लगइन अंतिम जार फ़ाइल बनाने के लिए प्लगइन
6 मावेन युद्ध प्लगइन अंतिम युद्ध फ़ाइल बनाने के लिए प्लगइन
7 मावेन-अचूक-प्लगइन टेस्ट रन का प्रबंधन करता है
8 बिल्डनंबर-मावेन-प्लगइन एक बिल्ड नंबर उत्पन्न करता है

प्रत्येक प्लगइन अपने तरीके से दिलचस्प है, लेकिन हमें उन सभी का विश्लेषण करना होगा। आइए मुख्य बात से शुरू करें - संकलन प्रबंधन प्लगइन।

1.2 संकलन प्लगइन मावेन-कंपाइलर-प्लगइन

सबसे लोकप्रिय प्लगइन जो आपको कंपाइलर के संस्करण को नियंत्रित करने की अनुमति देता है और लगभग सभी परियोजनाओं में उपयोग किया जाता है maven-compiler-plugin। इसकी डिफ़ॉल्ट सेटिंग्स हैं, लेकिन लगभग हर प्रोजेक्ट में उन्हें फिर से सेट करने की आवश्यकता होती है।

सबसे सरल संस्करण में, प्लग-इन में, आपको जावा स्रोत कोड के संस्करण और जावा मशीन के संस्करण को निर्दिष्ट करने की आवश्यकता होती है जिसके तहत असेंबली की जाती है:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <source>1.11</source>
        <target>1.13</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

उपरोक्त उदाहरण में, हमने तीन जावा कंपाइलर विकल्प निर्धारित किए हैं: source, targetऔर encoding

पैरामीटर sourceहमें अपने स्रोतों के लिए जावा संस्करण सेट करने की अनुमति देता है। पैरामीटर targetजावा मशीन का संस्करण है जिसके तहत आप कक्षाओं को संकलित करना चाहते हैं। यदि कोई कोड या जावा मशीन संस्करण निर्दिष्ट नहीं है, तो डिफ़ॉल्ट 1.3 है

अंत में, पैरामीटर encodingआपको जावा फाइलों के एन्कोडिंग को निर्दिष्ट करने की अनुमति देता है। हमने इशारा किया UTF-8। अब लगभग सभी स्रोत UTF-8. लेकिन यदि यह पैरामीटर निर्दिष्ट नहीं है, तो ऑपरेटिंग सिस्टम की वर्तमान एन्कोडिंग का चयन किया जाएगा। विंडोज के लिए, यह एन्कोडिंग है Windows-1251

ऐसे मामले भी होते हैं जब बिल्ड कंप्यूटर में जावा के कई संस्करण स्थापित होते हैं: विभिन्न मॉड्यूल और/या विभिन्न प्रोजेक्ट बनाने के लिए। इस स्थिति में, JAVA_HOMEउनमें से केवल एक का पथ चर में निर्दिष्ट किया जा सकता है।

इसके अलावा, जावा मशीन के विभिन्न कार्यान्वयन हैं: OpenJDK, OracleJDK, Amazon JDK। और परियोजना जितनी बड़ी होगी, उसकी संरचना उतनी ही जटिल होगी। लेकिन आप टैग का उपयोग कर प्लगइन के लिए जेवैक कंपाइलर के लिए स्पष्ट रूप से पथ सेट कर सकते हैं . इसे विशेष रूप से इस अवसर के लिए जोड़ा गया था।

प्लगइन maven-compiler-pluginके दो लक्ष्य हैं:

  • compiler:compile- संकलन चरण से जुड़े डिफ़ॉल्ट रूप से स्रोतों का संकलन
  • compiler:testCompile- परीक्षणों का संकलन, डिफ़ॉल्ट रूप से यह परीक्षण-संकलन चरण से जुड़ा होता है।

आप कमांड लाइन पर जावैक कंपाइलर को पास किए जाने वाले तर्कों की एक सूची भी निर्दिष्ट कर सकते हैं:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version>
    <configuration>
        <compilerArgs>
            <arg>-verbose</arg>
            <arg>-Xlint:all,-options,-path<arg>
        </compilerArgs>
    </configuration>
</plugin>

1.3 जार फ़ाइल मेवेन-जार-प्लगइन बनाने के लिए प्लगइन

यदि आप मावेन के साथ अपनी जार लाइब्रेरी बनाना चाहते हैं, तो आपको मावेन-जार-प्लगइन की आवश्यकता होगी। यह प्लगइन बहुत सी उपयोगी चीजें करता है।

ऐसे प्लगइन का एक उदाहरण:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <includes>
            <include>**/properties/*</include>
        </includes>
        <archive>
           <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
        </archive>
    </configuration>
</plugin>

सबसे पहले, इसका उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि कौन सी फाइलें लाइब्रेरी में जाएंगी और कौन सी नहीं। <include>अनुभाग में टैग का उपयोग करके , <includes>आप उन निर्देशिकाओं की सूची निर्दिष्ट कर सकते हैं जिनकी सामग्री को लाइब्रेरी में जोड़ने की आवश्यकता है

दूसरे, प्रत्येक जार में एक मेनिफ़ेस्ट ( MANIFEST.MF फ़ाइल ) होना चाहिए। प्लगइन स्वयं इसे लाइब्रेरी में सही जगह पर रखेगा, आपको केवल यह निर्दिष्ट करने की आवश्यकता है कि इसे किस पथ पर ले जाना है। इसके लिए टैग का इस्तेमाल किया जाता है <manifestFile>

अंत में, प्लगइन अपने आप एक मेनिफेस्ट उत्पन्न कर सकता है। ऐसा करने के लिए, टैग के बजाय, <manifestFile>आपको <manifest>इसमें एक टैग जोड़ने और भविष्य के मेनिफेस्ट के लिए डेटा निर्दिष्ट करने की आवश्यकता है। उदाहरण:

<configuration>
    <archive>
        <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.codegym.MainApplication</mainClass>
        </manifest>
    </archive>
</configuration>

टैग <addClasspath>निर्दिष्ट करता है कि मेनिफेस्ट में जोड़ना है या नहीं CLASSPATH

टैग <classpathPrefix>आपको प्रत्येक संसाधन से पहले एक उपसर्ग (उदाहरण के लिब में) जोड़ने की अनुमति देता है। एक उपसर्ग निर्दिष्ट करने से <classpathPrefix>आप एक अलग फ़ोल्डर में निर्भरताएँ रख सकते हैं।

हां, आप पुस्तकालयों को किसी अन्य पुस्तकालय के अंदर रख सकते हैं। और कई आश्चर्य आपके लिए इंतजार कर रहे हैं जब आपको गुण फ़ाइल के पथ को पास करने की आवश्यकता होती है, जो कि जार लाइब्रेरी में है, जो कि जार लाइब्रेरी में है।

अंत में, टैग <mainClass>मुख्य निष्पादन योग्य वर्ग को इंगित करता है। " मुख्य निष्पादन योग्य वर्ग क्या है? ", - आप पूछना। और बात यह है कि एक जावा मशीन एक प्रोग्राम चला सकती है जो न केवल जावा वर्ग द्वारा निर्दिष्ट किया जाता है, बल्कि एक जार फ़ाइल द्वारा भी निर्दिष्ट किया जाता है। और यह इस मामले के लिए है कि मुख्य शुरुआती वर्ग की जरूरत है।

1.4 बिल्ड नंबर जनरेशन प्लगइन बिल्डनंबर-मावेन-प्लगइन

बहुत बार, जार पुस्तकालयों और युद्ध फ़ाइलों में परियोजना के नाम और उसके संस्करण के साथ-साथ असेंबली के संस्करण के साथ जानकारी शामिल होती है। यह न केवल निर्भरताओं के प्रबंधन के लिए उपयोगी है, बल्कि यह परीक्षण को भी सरल करता है: यह स्पष्ट है कि पुस्तकालय के किस संस्करण में त्रुटि को ठीक किया गया है और इसमें इसे जोड़ा गया है।

सबसे अधिक बार, यह कार्य इस तरह हल किया जाता है - वे एक विशेष फ़ाइल बनाते हैं application.propertiesजिसमें सभी आवश्यक जानकारी होती है और इसे विधानसभा में शामिल किया जाता है। आप बिल्ड स्क्रिप्ट को भी कॉन्फ़िगर कर सकते हैं ताकि इस फ़ाइल का डेटा MANIFEST.MFआदि में माइग्रेट हो जाए।

लेकिन जो सबसे दिलचस्प है वह यह है कि मावेन के पास एक विशेष प्लगइन है जो इस तरह की एक application.properties फ़ाइल उत्पन्न कर सकता है। ऐसा करने के लिए, आपको ऐसी फ़ाइल बनाने और इसे विशेष डेटा टेम्प्लेट से भरने की आवश्यकता है। उदाहरण:

# application.properties
app.name=${pom.name}
app.version=${pom.version}
app.build=${buildNumber}

बिल्ड चरण में सभी तीन पैरामीटर के मान प्रतिस्थापित किए जाएंगे।

पैरामीटर pom.nameऔर pom.versionसीधे से लिया जाएगा pom.xml। और मावेन में एक अद्वितीय बिल्ड नंबर उत्पन्न करने के लिए एक विशेष प्लगइन है - buildnumber-maven-plugin. नीचे उदाहरण देखें:

<packaging>war</packaging>
<version>1.0</version>
<plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>buildnumber-maven-plugin</artifactId>
        <version>1.2</version>
        <executions>
            <execution>
                <phase>validate</phase>
                <goals>
                    <goal>create</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <revisionOnScmFailure>true</revisionOnScmFailure>
            <format>{0}-{1,date,yyyyMMdd}</format>
            <items>
                 <item>${project.version}</item>
                 <item>timestamp</item>
            </items>
        </configuration>
    </plugin>
</plugins>

उपरोक्त उदाहरण में, तीन महत्वपूर्ण बातें घटित होती हैं। सबसे पहले, असेंबली संस्करण को सेट करने के लिए प्लगइन को ही निर्दिष्ट किया गया हैदूसरे, यह निर्दिष्ट किया गया है कि यह मान्य चरण (पहले चरण) के दौरान चलेगा और एक बिल्ड नंबर - उत्पन्न करेगा ${buildNumber}

और तीसरा, इस असेंबली नंबर का प्रारूप इंगित किया गया है, जो कई हिस्सों से एक साथ चिपका हुआ है । यह प्रोजेक्ट का संस्करण है project.versionऔर टेम्पलेट द्वारा दिया गया वर्तमान समय है। टेम्पलेट प्रारूप जावा क्लास द्वारा निर्दिष्ट किया गया है MessageFormat