1.1 Lista de pluginuri de construit în Maven

Ansamblul din Maven poate fi configurat foarte flexibil. Dezvoltatorii Maven au creat special zeci de plugin-uri, cu ajutorul cărora puteți configura în mod foarte flexibil diverse versiuni. Cele mai populare dintre ele sunt prezentate în tabelul de mai jos:

conecteaza Descriere
1 maven-compiler-plugin Gestionează compilarea Java
2 maven-resources-plugin Controlează includerea resurselor într-un ansamblu
3 plugin sursă maven Controlează dacă codul sursă este inclus într-un ansamblu
4 maven-dependency-plugin Controlează procesul de copiere a bibliotecilor de dependențe
5 maven-jar-plugin Plugin pentru crearea fișierului jar final
6 pluginul maven war Plugin pentru crearea fișierului de război final
7 maven-surfire-plugin Gestionează testele
8 buildnumber-maven-plugin Generează un număr de versiune

Fiecare plugin este interesant în felul lui, dar va trebui să le analizăm pe toate. Să începem cu principalul lucru - pluginul de gestionare a compilațiilor.

1.2 Plugin de compilare maven-compiler-plugin

Cel mai popular plugin care vă permite să controlați versiunea compilatorului și este folosit în aproape toate proiectele este maven-compiler-plugin. Are setări implicite, dar în aproape fiecare proiect acestea trebuie setate din nou.

În cea mai simplă versiune, în plug-in, trebuie să specificați versiunea codului sursă Java și versiunea mașinii Java sub care se realizează asamblarea:

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

În exemplul de mai sus, setăm trei opțiuni de compilare Java source: targetși encoding.

Parametrul sourcene permite să setăm versiunea Java pentru sursele noastre. Parametrul targeteste versiunea mașinii Java sub care doriți să compilați clasele. Dacă nu este specificat nici un cod sau o versiune de mașină Java, atunci valoarea implicită este 1.3

În cele din urmă, parametrul encodingvă permite să specificați codificarea fișierelor Java. am indicat UTF-8. Acum aproape toate sursele sunt stocate în UTF-8. Dar dacă acest parametru nu este specificat, atunci va fi selectată codarea curentă a sistemului de operare. Pentru Windows, aceasta este codificarea Windows-1251.

Există, de asemenea, cazuri când computerul de compilare are instalate mai multe versiuni de Java: pentru a construi module diferite și/sau proiecte diferite. În acest caz, JAVA_HOMEnumai calea către una dintre ele poate fi specificată în variabilă.

În plus, există diferite implementări ale mașinii Java: OpenJDK, OracleJDK, Amazon JDK. Și cu cât proiectul este mai mare, cu atât structura lui este mai complexă. Dar puteți seta în mod explicit calea către compilatorul javac pentru plugin folosind eticheta . A fost adăugat special pentru această ocazie.

Pluginul maven-compiler-pluginare două obiective:

  • compiler:compile– compilarea surselor, implicit asociate fazei de compilare
  • compiler:testCompile– compilare de teste, implicit este asociată cu faza de testare-compilare.

De asemenea, puteți specifica o listă de argumente care urmează să fie transmise compilatorului javac pe linia de comandă:

<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 pentru crearea fișierului jar maven-jar-plugin

Dacă doriți să vă construiți propria bibliotecă jar cu Maven, veți avea nevoie de plugin-ul maven-jar. Acest plugin face o mulțime de lucruri utile.

Un exemplu de astfel de 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>

În primul rând, poate fi folosit pentru a specifica ce fișiere vor intra în bibliotecă și care nu. Folosind etichetele <include>din secțiune, <includes>puteți specifica o listă de directoare al căror conținut trebuie adăugat la bibliotecă .

În al doilea rând, fiecare borcan trebuie să aibă un manifest ( fișier MANIFEST.MF ). Pluginul în sine îl va pune la locul potrivit în bibliotecă, trebuie doar să specificați calea pe care să-l luați. Eticheta este folosită pentru aceasta <manifestFile>.

În cele din urmă, pluginul poate genera un manifest pe cont propriu. Pentru a face acest lucru, în loc de o etichetă, <manifestFile>trebuie să adăugați o etichetă <manifest>și să specificați date pentru viitorul manifest în ea. Exemplu:

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

Eticheta <addClasspath>specifică dacă se adaugă la manifest CLASSPATH.

Eticheta <classpathPrefix>vă permite să adăugați un prefix (în exemplul lib) înainte de fiecare resursă. Specificarea unui prefix în <classpathPrefix>vă permite să plasați dependențe într-un folder separat.

Da, puteți plasa biblioteci într-o altă bibliotecă. Și vă așteaptă multe surprize când trebuie să treceți undeva calea către fișierul de proprietăți, care se află în biblioteca jar, care este în biblioteca jar.

În cele din urmă, eticheta <mainClass>indică clasa principală executabilă. „Care este clasa principală executabilă? ", - tu intrebi. Și lucrul este că o mașină Java poate rula un program care este specificat nu numai de o clasă Java, ci și de un fișier jar. Și tocmai pentru acest caz este necesară clasa de pornire principală.

1.4 Plugin de generare a numărului de compilare buildnumber-maven-plugin

Foarte des, bibliotecile jar și fișierele de război includ informații cu numele proiectului și versiunea acestuia, precum și versiunea ansamblului. Nu numai că este util pentru gestionarea dependențelor, dar simplifică și testarea: este clar în ce versiune a bibliotecii este remediată eroarea și în care este adăugată.

Cel mai adesea, această sarcină este rezolvată astfel - creează un fișier special application.propertiescare conține toate informațiile necesare și le includ în ansamblu. De asemenea, puteți configura scriptul de compilare astfel încât datele din acest fișier să migreze la MANIFEST.MFetc.

Dar ceea ce este cel mai interesant este că Maven are un plugin special care poate genera un astfel de fișier application.properties. Pentru a face acest lucru, trebuie să creați un astfel de fișier și să îl completați cu șabloane speciale de date. Exemplu:

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

Valorile tuturor celor trei parametri vor fi înlocuite în etapa de construire.

Parametrii pom.nameși pom.versionvor fi preluate direct din pom.xml. Și pentru a genera un număr unic de versiune în Maven, există un plugin special - buildnumber-maven-plugin. Vezi exemplul de mai jos:

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

În exemplul de mai sus, se întâmplă trei lucruri importante. În primul rând, pluginul în sine este specificat pentru setarea versiunii de asamblare . În al doilea rând, se precizează că va rula în timpul fazei de validare (prima fază) și va genera un număr de build - ${buildNumber}.

Și în al treilea rând, este indicat formatul acestui număr de ansamblu, care este lipit împreună din mai multe părți . Aceasta este versiunea proiectului project.versionși ora curentă dată de șablon. Formatul șablonului este specificat de clasa Java MessageFormat.