1.1 Бписък с Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π² Maven

БглобяванСто Π² Maven ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ гъвкаво. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Maven са създали спСциално дСсСтки Π΄ΠΎΠ±Π°Π²ΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ гъвкаво Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ. Най-популярнитС ΠΎΡ‚ тях са ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Π² tableΡ‚Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ:

плъгин ОписаниС
1 maven-ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€-плъгин Управлява Java компилация
2 плъгин Π·Π° maven-рСсурси ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурси Π² сборка
3 плъгин Π·Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° maven ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° Π΄Π°Π»ΠΈ изходният code Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² сборка
4 maven-dependency-plugin ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° процСса Π½Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ със зависимости
5 maven-jar-plugin Плъгин Π·Π° създаванС Π½Π° Ρ„ΠΈΠ½Π°Π»Π΅Π½ jar Ρ„Π°ΠΉΠ»
6 плъгин Π·Π° maven war Плъгин Π·Π° създаванС Π½Π° окончатСлния Π²ΠΎΠ΅Π½Π΅Π½ Ρ„Π°ΠΉΠ»
7 maven-surefire-плъгин Управлява тСстови изпълнСния
8 buildnumber-maven-plugin Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠΌΠ΅Ρ€ Π½Π° компилация

ВсСки плъгин Π΅ интСрСсСн ΠΏΠΎ свой Π½Π°Ρ‡ΠΈΠ½, Π½ΠΎ Ρ‰Π΅ трябва Π΄Π° Π³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ всички. Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с основното - плъгина Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° компилация.

1.2 ΠŸΡ€ΠΈΡΡ‚Π°Π²ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏorΡ€Π°Π½Π΅ maven-compiler-plugin

Най-популярният плъгин, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ versionΡ‚Π° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΠΎΡ‡Ρ‚ΠΈ всички ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Π΅ maven-compiler-plugin. Има настройки ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½ΠΎ Π² ΠΏΠΎΡ‡Ρ‚ΠΈ всСки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

Π’ Π½Π°ΠΉ-простата version, Π² приставката, трябва Π΄Π° посочитС versionΡ‚Π° Π½Π° изходния code Π½Π° Java ΠΈ versionΡ‚Π° Π½Π° Java ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, ΠΏΠΎΠ΄ която сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° сглобяванСто:

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

Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Ρ‚Ρ€ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π½Π° Java source: targetΠΈ encoding.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ sourceΠ½ΠΈ позволява Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ versionΡ‚Π° Π½Π° Java Π·Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ targetΠ΅ versionΡ‚Π° Π½Π° Java ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, ΠΏΠΎΠ΄ която искатС Π΄Π° ΠΊΠΎΠΌΠΏorΡ€Π°Ρ‚Π΅ класовСтС. Ако Π½Π΅ Π΅ ΡƒΠΊΠ°Π·Π°Π½ code or version Π½Π° Java машина, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ 1.3

И накрая, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ encodingΠ²ΠΈ позволява Π΄Π° посочитС codeΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Java Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅. НиС посочихмС UTF-8. Π‘Π΅Π³Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всички ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ Π² UTF-8. Но Π°ΠΊΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ Π½Π΅ Π΅ посочСн, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ бъдС ΠΈΠ·Π±Ρ€Π°Π½ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ codeΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма. Π—Π° Windows Ρ‚ΠΎΠ²Π° Π΅ codeΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Windows-1251.

Има ΠΈ случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ΡŠΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈΠΌΠ° инсталирани няколко вСрсии Π½Π° Java: Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ/or Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ случай JAVA_HOMEΠ² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΡƒΠΊΠ°Π·Π°Π½ само ΠΏΡŠΡ‚ΡΡ‚ Π΄ΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ тях.

ОсвСн Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Java ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°: OpenJDK, OracleJDK, Amazon JDK. И ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-голям Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ-слоТна Π΅ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° структура. Но ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡŠΡ‚Ρ Π΄ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π½Π° javac Π·Π° плъгина, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° . Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ спСциално Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ²ΠΎΠ΄.

ΠŸΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ maven-compiler-pluginΠΈΠΌΠ° Π΄Π²Π΅ Ρ†Π΅Π»ΠΈ:

  • compiler:compile– ΠΊΠΎΠΌΠΏorΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΌΠΏorΡ€Π°Π½Π΅
  • compiler:testCompile– компилация Π½Π° тСстовС, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° с Ρ„Π°Π·Π°Ρ‚Π° тСст-ΠΊΠΎΠΌΠΏorΡ€Π°Π½Π΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° посочитС списък с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π½Π° javac Π² командния Ρ€Π΅Π΄:

<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 Ρ„Π°ΠΉΠ» maven-jar-plugin

Ако искатС Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ своя собствСна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ Π±ΡƒΡ€ΠΊΠ°Π½ΠΈ с Maven, Ρ‰Π΅ Π²ΠΈ трябва Π΄ΠΎΠ±Π°Π²ΠΊΠ°Ρ‚Π° maven-jar. Π’ΠΎΠ·ΠΈ плъгин ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π½Π΅Ρ‰Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΡŠΠ² плъгин:

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

И накрая, ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ ΠΌΠΎΠΆΠ΅ сам Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° манифСст. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, instead of Ρ‚Π°Π³, <manifestFile>трябва Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ‚Π°Π³ <manifest>ΠΈ Π΄Π° посочитС Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡŠΠ΄Π΅Ρ‰ΠΈΡ манифСст. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

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

Π•Ρ‚ΠΈΠΊΠ΅Ρ‚ΡŠΡ‚ <addClasspath>ΡƒΠΊΠ°Π·Π²Π° Π΄Π°Π»ΠΈ Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ към манифСста CLASSPATH.

Π’Π°Π³ΡŠΡ‚ <classpathPrefix>Π²ΠΈ позволява Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ прСфикс (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°) ΠΏΡ€Π΅Π΄ΠΈ всСки рСсурс. ΠŸΠΎΡΠΎΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прСфикс Π² <classpathPrefix>Π²ΠΈ позволява Π΄Π° поставитС зависимости Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° ΠΏΠ°ΠΏΠΊΠ°.

Π”Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° поставитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Π΄Ρ€ΡƒΠ³Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. И ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Π½Π΅Π½Π°Π΄ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ някъдС ΠΏΡŠΡ‚Ρ Π΄ΠΎ file със свойства, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° Π±ΡƒΡ€ΠΊΠ°Π½ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° Π±ΡƒΡ€ΠΊΠ°Π½ΠΈ.

И накрая, Ρ‚Π°Π³ΡŠΡ‚ <mainClass>сочи към главния изпълним клас. β€žΠšΠ°ΠΊΡŠΠ² Π΅ главният изпълним клас? ", - Ρ‚ΠΈ ΠΏΠΈΡ‚Π°Ρˆ. Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π΅ Ρ‚Π°ΠΌ, Ρ‡Π΅ Java машина ΠΌΠΎΠΆΠ΅ Π΄Π° изпълнява ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π½Π΅ само ΠΎΡ‚ Java клас, Π½ΠΎ ΠΈ ΠΎΡ‚ jar Ρ„Π°ΠΉΠ». И ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π° Ρ‚ΠΎΠ·ΠΈ случай Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ основният Π½Π°Ρ‡Π°Π»Π΅Π½ клас.

1.4 Плъгин Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° компилация buildnumber-maven-plugin

Много чСсто jar Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΈ Π²ΠΎΠ΅Π½Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ информация с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° version, HowΡ‚ΠΎ ΠΈ versionΡ‚Π° Π½Π° сборката. Π’ΠΎΠ²Π° Π½Π΅ само Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° зависимоститС, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° опростява тСстванСто: ясно Π΅ Π² коя version Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π΅ ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° ΠΈ Π² коя Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π°.

Най-чСсто Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° сС Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½ - Ρ‚Π΅ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ спСциалСн Ρ„Π°ΠΉΠ» application.properties, ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° цялата Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° информация ΠΈ Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π² ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ скрипта Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Ρ‚ към MANIFEST.MFΠΈ Ρ‚.Π½.

Но Π½Π°ΠΉ-интСрСсното Π΅, Ρ‡Π΅ Maven ΠΈΠΌΠ° спСциалСн плъгин, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Ρ‚Π°ΠΊΡŠΠ² Ρ„Π°ΠΉΠ» application.properties. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΡŠΠ² Ρ„Π°ΠΉΠ» ΠΈ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ със спСциални шаблони Π·Π° Π΄Π°Π½Π½ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

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

БтойноститС ΠΈ Π½Π° Ρ‚Ρ€ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈ Π½Π° Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅ pom.nameΠΈ pom.versionΡ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π²Π·Π΅Ρ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ pom.xml. А Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° компилация Π² Maven ΠΈΠΌΠ° спСциалСн плъгин - 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>

Π’ горния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сС случват Ρ‚Ρ€ΠΈ Π²Π°ΠΆΠ½ΠΈ Π½Π΅Ρ‰Π°. ΠŸΡŠΡ€Π²ΠΎ, самият плъгин Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π·Π° настройка Π½Π° versionΡ‚Π° Π½Π° асСмблиранС . Π’Ρ‚ΠΎΡ€ΠΎ, ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΎ Π΅, Ρ‡Π΅ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ„Π°Π·Π°Ρ‚Π° Π½Π° Π²Π°Π»ΠΈΠ΄ΠΈΡ€Π°Π½Π΅ (ΠΏΡŠΡ€Π²Π°Ρ‚Π° Ρ„Π°Π·Π°) ΠΈ Ρ‰Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π½ΠΎΠΌΠ΅Ρ€ Π½Π° компилация - ${buildNumber}.

И Ρ‚Ρ€Π΅Ρ‚ΠΎ, посочва сС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° сглобяванС, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π·Π°Π»Π΅ΠΏΠ΅Π½ Π·Π°Π΅Π΄Π½ΠΎ ΠΎΡ‚ няколко части . Π’ΠΎΠ²Π° Π΅ versionΡ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° project.versionΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅, Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ‚ шаблона. Π€ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° шаблона сС опрСдСля ΠΎΡ‚ Java класа MessageFormat.