1.1 Listahan ng mga plugin na gagawin sa Maven

Ang pagpupulong sa Maven ay maaaring i-configure nang napaka-flexible. Ang mga developer ng Maven ay espesyal na lumikha ng dose-dosenang mga plugin, gamit kung saan maaari mong napaka-flexible na i-configure ang iba't ibang mga build. Ang pinakasikat sa kanila ay ipinapakita sa talahanayan sa ibaba:

isaksak Paglalarawan
1 maven-compiler-plugin Namamahala sa Java compilation
2 maven-resources-plugin Kinokontrol ang pagsasama ng mga mapagkukunan sa isang pagpupulong
3 maven source plugin Kinokontrol kung ang source code ay kasama sa isang assembly
4 maven-dependency-plugin Kinokontrol ang proseso ng pagkopya ng mga library ng dependency
5 maven-jar-plugin Plugin para sa paggawa ng final jar file
6 plugin ng maven war Plugin para sa paggawa ng final war file
7 maven-surefire-plugin Namamahala sa mga pagsubok na tumatakbo
8 buildnumber-maven-plugin Bumubuo ng build number

Ang bawat plugin ay kawili-wili sa sarili nitong paraan, ngunit kailangan nating suriin ang lahat ng ito. Magsimula tayo sa pangunahing bagay - ang plugin ng pamamahala ng compilation.

1.2 Compilation plugin maven-compiler-plugin

Ang pinakasikat na plugin na nagbibigay-daan sa iyong kontrolin ang bersyon ng compiler at ginagamit sa halos lahat ng mga proyekto ay ang maven-compiler-plugin. Mayroon itong mga default na setting, ngunit sa halos bawat proyekto kailangan nilang itakda muli.

Sa pinakasimpleng bersyon, sa plug-in, kailangan mong tukuyin ang bersyon ng Java source code at ang bersyon ng Java machine kung saan isinasagawa ang pagpupulong:

<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>

Sa halimbawa sa itaas, nagtakda kami ng tatlong opsyon sa Java compiler: source, targetat encoding.

Binibigyang-daan kami ng parameter sourcena itakda ang bersyon ng Java para sa aming mga mapagkukunan. Ang parameter targetay ang bersyon ng Java machine kung saan nais mong i-compile ang mga klase. Kung walang code o bersyon ng Java machine na tinukoy, ang default ay 1.3

Sa wakas, pinapayagan ka ng parameter encodingna tukuyin ang pag-encode ng mga Java file. Ipinahiwatig namin UTF-8. Ngayon halos lahat ng mga mapagkukunan ay naka-imbak sa UTF-8. Ngunit kung hindi tinukoy ang parameter na ito, pipiliin ang kasalukuyang pag-encode ng operating system. Para sa Windows, ito ang encoding Windows-1251.

Mayroon ding mga kaso kapag ang build computer ay may ilang bersyon ng Java na naka-install: upang bumuo ng iba't ibang mga module at/o iba't ibang mga proyekto. Sa kasong ito, JAVA_HOMEtanging ang landas sa isa sa mga ito ang maaaring tukuyin sa variable.

Bilang karagdagan, mayroong iba't ibang mga pagpapatupad ng Java machine: OpenJDK, OracleJDK, Amazon JDK. At kung mas malaki ang proyekto, mas kumplikado ang istraktura nito. Ngunit maaari mong tahasang itakda ang path sa javac compiler para sa plugin gamit ang tag . Ito ay partikular na idinagdag para sa okasyong ito.

Ang plugin maven-compiler-pluginay may dalawang layunin:

  • compiler:compile– compilation ng mga source, bilang default na nauugnay sa compile phase
  • compiler:testCompile– compilation ng mga pagsubok, bilang default ay nauugnay ito sa test-compile phase.

Maaari mo ring tukuyin ang isang listahan ng mga argumento na ipapasa sa javac compiler sa command line:

<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 para sa paglikha ng jar file na maven-jar-plugin

Kung gusto mong bumuo ng iyong sariling jar library kasama si Maven, kakailanganin mo ang maven-jar-plugin. Ang plugin na ito ay gumagawa ng maraming kapaki-pakinabang na bagay.

Isang halimbawa ng naturang plugin:

<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>

Una, maaari itong gamitin upang tukuyin kung aling mga file ang papasok sa library at alin ang hindi. Gamit ang mga tag <include>sa seksyon, <includes>maaari mong tukuyin ang isang listahan ng mga direktoryo na ang nilalaman ay kailangang idagdag sa library .

Pangalawa, ang bawat garapon ay dapat may manifest ( MANIFEST.MF file ). Ang plugin mismo ang maglalagay nito sa tamang lugar sa library, kailangan mo lang tukuyin kung aling landas ang dadaanan nito. Ang tag ay ginagamit para dito <manifestFile>.

Sa wakas, ang plugin ay maaaring bumuo ng isang manifest sa sarili nitong. Upang gawin ito, sa halip na isang tag, <manifestFile>kailangan mong magdagdag ng isang tag <manifest>at tukuyin ang data para sa hinaharap na manifest dito. Halimbawa:

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

Tinutukoy ng tag <addClasspath>kung idaragdag sa manifest CLASSPATH.

Binibigyang-daan ka ng tag <classpathPrefix>na magdagdag ng prefix (sa halimbawang lib) bago ang bawat mapagkukunan. Ang pagtukoy ng prefix sa ay <classpathPrefix>nagbibigay-daan sa iyong maglagay ng mga dependency sa isang hiwalay na folder.

Oo, maaari kang maglagay ng mga aklatan sa loob ng isa pang aklatan. At mayroong maraming mga sorpresa na naghihintay para sa iyo kapag kailangan mong ipasa ang landas sa file ng mga katangian sa isang lugar, na nasa library ng jar, na nasa library ng jar.

Sa wakas, <mainClass>tumuturo ang tag sa pangunahing executable na klase. “Ano ang pangunahing executable class? ", - tanong mo. At ang bagay ay ang isang Java machine ay maaaring magpatakbo ng isang programa na tinukoy hindi lamang ng isang klase ng Java, kundi pati na rin ng isang jar file. At para sa kasong ito na kailangan ang pangunahing panimulang klase.

1.4 Build number generation plugin buildnumber-maven-plugin

Kadalasan, ang mga aklatan ng jar at mga file ng digmaan ay may kasamang impormasyon na may pangalan ng proyekto at bersyon nito, pati na rin ang bersyon ng pagpupulong. Hindi lamang ito kapaki-pakinabang para sa pamamahala ng mga dependency, ngunit pinapasimple din nito ang pagsubok: malinaw kung saang bersyon ng library ang error ay naayos at kung saan ito idinagdag.

Kadalasan, ang gawaing ito ay nalutas tulad nito - lumikha sila ng isang espesyal na file application.propertiesna naglalaman ng lahat ng kinakailangang impormasyon at isama ito sa pagpupulong. Maaari mo ring i-configure ang build script upang ang data mula sa file na ito ay lumipat sa MANIFEST.MFatbp.

Ngunit ang pinaka-interesante ay ang Maven ay may espesyal na plugin na maaaring makabuo ng naturang application.properties file. Upang gawin ito, kailangan mong lumikha ng naturang file at punan ito ng mga espesyal na template ng data. Halimbawa:

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

Ang mga halaga ng lahat ng tatlong mga parameter ay papalitan sa yugto ng pagbuo.

Mga parameter pom.nameat pom.versiondirektang kukunin mula sa pom.xml. At para makabuo ng natatanging build number sa Maven, mayroong isang espesyal na plugin - buildnumber-maven-plugin. Tingnan ang halimbawa sa ibaba:

<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>

Sa halimbawa sa itaas, tatlong mahahalagang bagay ang nangyayari. Una, ang plugin mismo ay tinukoy para sa pagtatakda ng bersyon ng pagpupulong . Pangalawa, ito ay tinukoy na ito ay tatakbo sa panahon ng pagpapatunay na yugto (ang pinakaunang yugto) at bubuo ng isang build number - ${buildNumber}.

At pangatlo, ang format ng numero ng pagpupulong na ito ay ipinahiwatig, na nakadikit mula sa ilang bahagi . Ito ang bersyon ng proyekto project.versionat ang kasalukuyang oras na ibinigay ng template. Ang format ng template ay tinukoy ng klase ng Java MessageFormat.