1.1 Lista wtyczek do zbudowania w Maven
Montaż w Maven można konfigurować bardzo elastycznie. Programiści Maven specjalnie stworzyli dziesiątki wtyczek, za pomocą których można bardzo elastycznie konfigurować różne buildy. Najpopularniejsze z nich przedstawia poniższa tabela:
podłącz | Opis | |
---|---|---|
1 | maven-compiler-plugin | Zarządza kompilacją Java |
2 | maven-resources-plugin | Kontroluje włączenie zasobów do zestawu |
3 | Wtyczka źródłowa maven | Kontroluje, czy kod źródłowy jest zawarty w zestawie |
4 | maven-dependency-plugin | Kontroluje proces kopiowania bibliotek zależności |
5 | maven-jar-plugin | Wtyczka do tworzenia końcowego pliku jar |
6 | plugin do wojny maven | Wtyczka do tworzenia ostatecznego pliku wojny |
7 | maven-surefire-plugin | Zarządza przebiegami testów |
8 | buildnumber-maven-plugin | Generuje numer kompilacji |
Każda wtyczka jest interesująca na swój sposób, ale będziemy musieli przeanalizować je wszystkie. Zacznijmy od najważniejszej rzeczy - wtyczki do zarządzania kompilacją.
1.2 Wtyczka do kompilacji maven-compiler-plugin
Najpopularniejszą wtyczką, która pozwala kontrolować wersję kompilatora i jest używana w prawie wszystkich projektach, jest rozszerzenie maven-compiler-plugin
. Ma ustawienia domyślne, ale w prawie każdym projekcie trzeba je ustawić od nowa.
W najprostszej wersji we wtyczce należy określić wersję kodu źródłowego Javy oraz wersję maszyny Javy, na której przeprowadzany jest montaż:
<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>
W powyższym przykładzie ustawiliśmy trzy opcje kompilatora Javy: source
, target
i encoding
.
Parametr source
pozwala nam ustawić wersję Java dla naszych źródeł. Parametr target
to wersja maszyny Java, na której chcesz skompilować klasy. Jeśli nie określono kodu ani wersji maszyny Java, wartością domyślną jest 1.3
Wreszcie parametr encoding
pozwala określić kodowanie plików Java. wskazaliśmy UTF-8
. Teraz prawie wszystkie źródła są przechowywane w formacie UTF-8
. Ale jeśli ten parametr nie zostanie określony, zostanie wybrane bieżące kodowanie systemu operacyjnego. W systemie Windows jest to kodowanie Windows-1251
.
Zdarzają się również przypadki, gdy komputer budujący ma zainstalowane kilka wersji Javy: do budowania różnych modułów i/lub różnych projektów. W takim przypadku JAVA_HOME
w zmiennej można podać tylko ścieżkę do jednego z nich.
Ponadto istnieją różne implementacje maszyny Java: OpenJDK, OracleJDK, Amazon JDK. A im większy projekt, tym bardziej złożona jest jego struktura. Ale możesz jawnie ustawić ścieżkę do kompilatora javac dla wtyczki za pomocą tagu
Wtyczka maven-compiler-plugin
ma dwa cele:
compiler:compile
– kompilacja źródeł, domyślnie powiązana z fazą kompilacjicompiler:testCompile
– kompilacja testów, domyślnie jest powiązana z fazą test-compile.
Możesz także określić listę argumentów, które mają zostać przekazane kompilatorowi javac w wierszu poleceń:
<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 Wtyczka do tworzenia pliku jar maven-jar-plugin
Jeśli chcesz zbudować własną bibliotekę słoików za pomocą Mavena, będziesz potrzebować wtyczki maven-jar. Ta wtyczka robi wiele przydatnych rzeczy.
Przykład takiej wtyczki:
<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>
Po pierwsze, można go użyć do określenia, które pliki trafią do biblioteki, a które nie. Za pomocą tagów <include>
w sekcji <includes>
możesz określić listę katalogów, których zawartość ma zostać dodana do biblioteki .
Po drugie, każdy słoik musi mieć manifest ( plik MANIFEST.MF ). Wtyczka sama umieści ją w odpowiednim miejscu w bibliotece, trzeba tylko określić, którą ścieżką ją obrać. Służy do tego tag <manifestFile>
.
Wreszcie wtyczka może samodzielnie wygenerować manifest. Aby to zrobić, zamiast tagu <manifestFile>
musisz dodać tag <manifest>
i określić w nim dane do przyszłego manifestu. Przykład:
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.codegym.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
Tag <addClasspath>
określa, czy dodać do manifestu CLASSPATH
.
Tag <classpathPrefix>
umożliwia dodanie prefiksu (w przykładowej bibliotece) przed każdym zasobem. Określenie prefiksu w <classpathPrefix>
umożliwia umieszczenie zależności w osobnym folderze.
Tak, możesz umieścić biblioteki w innej bibliotece. I czeka na Ciebie wiele niespodzianek, gdy trzeba gdzieś przekazać ścieżkę do pliku właściwości, czyli w bibliotece jar, która jest w bibliotece jar.
Wreszcie znacznik <mainClass>
wskazuje na główną klasę pliku wykonywalnego. „Jaka jest główna klasa wykonywalna? ", - ty pytasz. Chodzi o to, że maszyna Java może uruchomić program, który jest określony nie tylko przez klasę Java, ale także przez plik jar. I właśnie w tym przypadku potrzebna jest główna klasa początkowa.
1.4 Wtyczka do generowania numerów kompilacji buildnumber-maven-plugin
Bardzo często biblioteki jar i pliki wojen zawierają informacje z nazwą projektu i jego wersją, a także wersją asemblera. Jest to nie tylko przydatne do zarządzania zależnościami, ale także upraszcza testowanie: jasne jest, w której wersji biblioteki błąd został naprawiony, aw której został dodany.
Najczęściej to zadanie jest rozwiązywane w ten sposób - tworzą specjalny plik application.properties
zawierający wszystkie niezbędne informacje i dołączają go do zestawu. Możesz także skonfigurować skrypt kompilacji, aby dane z tego pliku migrowały do MANIFEST.MF
itp.
Ale najciekawsze jest to, że Maven ma specjalną wtyczkę, która może wygenerować taki plik application.properties. Aby to zrobić, musisz utworzyć taki plik i wypełnić go specjalnymi szablonami danych. Przykład:
# application.properties
app.name=${pom.name} app.version=${pom.version} app.build=${buildNumber}
Wartości wszystkich trzech parametrów zostaną podstawione na etapie kompilacji.
Parametry pom.name
i pom.version
zostaną pobrane bezpośrednio z pliku pom.xml
. Aby wygenerować unikalny numer kompilacji w Maven, dostępna jest specjalna wtyczka - buildnumber-maven-plugin
. Zobacz przykład poniżej:
<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>
W powyższym przykładzie zachodzą trzy ważne rzeczy. Po pierwsze, sama wtyczka jest określona do ustawiania wersji asemblera . Po drugie, określono, że będzie działać podczas fazy walidacji (pierwsza faza) i wygeneruje numer kompilacji - ${buildNumber}
.
I po trzecie, wskazany jest format tego numeru zespołu, który jest sklejony z kilku części . Jest to wersja projektu project.version
i aktualny czas podany przez szablon. Format szablonu jest określony przez klasę Java MessageFormat
.
GO TO FULL VERSION