1.1 Maven'de oluşturulacak eklentilerin listesi

Maven'deki montaj çok esnek bir şekilde yapılandırılabilir. Maven geliştiricileri, çeşitli yapıları çok esnek bir şekilde yapılandırabileceğiniz düzinelerce eklentiyi özel olarak oluşturmuştur. Bunlardan en popüler olanları aşağıdaki tabloda gösterilmektedir:

Eklenti Tanım
1 maven-derleyici-eklentisi Java derlemesini yönetir
2 maven-resources-eklentisi Kaynakların bir derlemeye dahil edilmesini denetler
3 maven kaynak eklentisi Kaynak kodunun bir derlemeye dahil edilip edilmediğini kontrol eder
4 maven-bağımlılık-eklentisi Bağımlılık kitaplıklarını kopyalama sürecini denetler
5 maven-jar-eklentisi Son jar dosyası oluşturmak için eklenti
6 maven savaş eklentisi Son savaş dosyasını oluşturmak için eklenti
7 maven-surefire-eklentisi Test çalıştırmalarını yönetir
8 buildnumber-maven-eklentisi Bir yapı numarası oluşturur

Her eklenti kendi yolunda ilginçtir, ancak hepsini analiz etmemiz gerekecek. Ana şeyle başlayalım - derleme yönetimi eklentisi.

1.2 Derleme eklentisi maven-derleyici-eklentisi

Derleyici sürümünü kontrol etmenizi sağlayan ve hemen hemen tüm projelerde kullanılan en popüler eklenti maven-compiler-plugin. Varsayılan ayarlara sahiptir, ancak hemen hemen her projede yeniden ayarlanması gerekir.

En basit sürümde, eklentide, Java kaynak kodunun sürümünü ve derlemenin yürütüldüğü Java makinesinin sürümünü belirtmeniz gerekir:

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

Yukarıdaki örnekte, üç Java derleyici seçeneği belirledik: source, targetve encoding.

Parametre, sourcekaynaklarımız için Java sürümünü ayarlamamızı sağlar. Parametre, targetsınıfları altında derlemek istediğiniz Java makinesinin sürümüdür. Herhangi bir kod veya Java makine sürümü belirtilmezse varsayılan 1.3'tür.

Son olarak, parametre encodingJava dosyalarının kodlamasını belirtmenize olanak tanır. belirttik UTF-8. Artık neredeyse tüm kaynaklar UTF-8. Ancak bu parametre belirtilmezse, işletim sisteminin mevcut kodlaması seçilecektir. Windows için bu, kodlamadır Windows-1251.

Yapı bilgisayarında birkaç Java sürümünün yüklü olduğu durumlar da vardır: farklı modüller ve/veya farklı projeler oluşturmak için. Bu durumda, JAVA_HOMEdeğişkende bunlardan yalnızca birine giden yol belirtilebilir.

Ek olarak, Java makinesinin farklı uygulamaları vardır: OpenJDK, OracleJDK, Amazon JDK. Ve proje ne kadar büyükse, yapısı da o kadar karmaşıktır. Ancak, etiketi kullanarak eklenti için javac derleyicisine giden yolu açıkça ayarlayabilirsiniz. . Bu durum için özel olarak eklenmiştir.

Eklentinin maven-compiler-pluginiki hedefi vardır:

  • compiler:compile– varsayılan olarak derleme aşamasıyla ilişkili kaynakların derlenmesi
  • compiler:testCompile– testlerin derlenmesi, varsayılan olarak test derleme aşamasıyla ilişkilendirilir.

Komut satırında javac derleyicisine iletilecek bağımsız değişkenlerin bir listesini de belirleyebilirsiniz:

<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 Jar dosyası oluşturmak için eklenti maven-jar-plugin

Maven ile kendi jar kütüphanenizi oluşturmak istiyorsanız, maven-jar-plugin'e ihtiyacınız olacak. Bu eklenti birçok yararlı şey yapar.

Böyle bir eklenti örneği:

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

İlk olarak, hangi dosyaların kitaplığa gireceğini ve hangilerinin girmeyeceğini belirtmek için kullanılabilir. <include>Bölümdeki etiketleri kullanarak , içeriğinin kitaplığa eklenmesi gereken dizinlerin bir listesini<includes> belirleyebilirsiniz .

İkinci olarak, her kavanozun bir bildirimi ( MANIFEST.MF dosyası) olmalıdır . Eklentinin kendisi onu kitaplıkta doğru yere koyacaktır, sadece hangi yolu izleyeceğinizi belirtmeniz gerekir. etiketi bunun için kullanılır <manifestFile>.

Son olarak, eklenti kendi başına bir bildirim oluşturabilir. Bunu yapmak için, bir etiket yerine, <manifestFile>bir etiket eklemeniz <manifest>ve içinde gelecekteki tezahür için verileri belirtmeniz gerekir. Örnek:

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

etiketi, <addClasspath>bildirime eklenip eklenmeyeceğini belirtir CLASSPATH.

etiketi, <classpathPrefix>her kaynağın önüne bir önek (örnek lib'de) eklemenize olanak tanır. İçinde bir önek belirtmek, <classpathPrefix>bağımlılıkları ayrı bir klasöre yerleştirmenize olanak tanır.

Evet, kitaplıkları başka bir kitaplığın içine yerleştirebilirsiniz. Ve özellikler dosyasının yolunu bir yere yani jar kütüphanesi içerisinde bulunan jar kütüphanesine aktarmanız gerektiğinde sizi bekleyen pek çok sürpriz var.

Son olarak, etiket <mainClass>ana yürütülebilir sınıfa işaret eder. “ Ana yürütülebilir sınıf nedir ? ", - sen sor. Ve mesele şu ki, bir Java makinesi, yalnızca bir Java sınıfı tarafından değil, aynı zamanda bir jar dosyası tarafından da belirtilen bir programı çalıştırabilir. Ve bu durum için ana başlangıç ​​\u200b\u200bsınıfına ihtiyaç vardır.

1.4 Yapı numarası oluşturma eklentisi buildnumber-maven-plugin

Çoğu zaman, jar kitaplıkları ve savaş dosyaları, derleme sürümünün yanı sıra projenin adı ve sürümünü içeren bilgileri içerir. Bu sadece bağımlılıkları yönetmek için yararlı olmakla kalmaz, aynı zamanda testi basitleştirir: hatanın kitaplığın hangi sürümünde düzeltildiği ve hangi sürümde eklendiği açıktır.

Çoğu zaman, bu görev şu şekilde çözülür - application.propertiesgerekli tüm bilgileri içeren özel bir dosya oluştururlar ve onu montaja dahil ederler. MANIFEST.MFYapı komut dosyasını, bu dosyadaki veriler etc. dosyasına taşınacak şekilde de yapılandırabilirsiniz.

Ancak en ilginç olanı, Maven'in böyle bir application.properties dosyası oluşturabilen özel bir eklentiye sahip olmasıdır. Bunu yapmak için böyle bir dosya oluşturmanız ve onu özel veri şablonlarıyla doldurmanız gerekir. Örnek:

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

Her üç parametrenin değerleri, oluşturma aşamasında değiştirilecektir.

Parametreler pom.nameve pom.versiondoğrudan pom.xml. Ve Maven'de benzersiz bir yapı numarası oluşturmak için özel bir eklenti var - buildnumber-maven-plugin. Aşağıdaki örneğe bakın:

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

Yukarıdaki örnekte, üç önemli şey olur. İlk olarak, montaj sürümünü ayarlamak için eklentinin kendisi belirtilir . İkinci olarak, doğrulama aşamasında (ilk aşama) çalışacağı ve bir yapı numarası - üreteceği belirtilir ${buildNumber}.

Üçüncüsü, birkaç parçadan birbirine yapıştırılan bu montaj numarasının formatı belirtilir . Bu, projenin sürümü project.versionve şablon tarafından verilen şimdiki zamandır. Şablon formatı Java sınıfı tarafından belirlenir MessageFormat.