1.1 Maven์—์„œ ๋นŒ๋“œํ•  ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ๋ก

Maven์˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Maven ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค์–‘ํ•œ ๋นŒ๋“œ๋ฅผ ๋งค์šฐ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์‹ญ ๊ฐœ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํŠน๋ณ„ํžˆ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ๊ฒƒ์€ ์•„๋ž˜ ํ‘œ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค๋ช…
1 ๋ฉ”์ด๋ธ ์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ Java ์ปดํŒŒ์ผ ๊ด€๋ฆฌ
2 ๋ฉ”์ด๋ธ ๋ฆฌ์†Œ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋ฆฌ์†Œ์Šค ํฌํ•จ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
์‚ผ ๋ฉ”์ด๋ธ ์†Œ์Šค ํ”Œ๋Ÿฌ๊ทธ์ธ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ์— ํฌํ•จ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
4 ๋ฉ”์ด๋ธ ์˜์กด์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ข…์†์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณต์‚ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.
5 maven-jar-ํ”Œ๋Ÿฌ๊ทธ์ธ ์ตœ์ข… jar ํŒŒ์ผ ์ƒ์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ
6 ๋ฉ”์ด๋ธ ์ „์Ÿ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ตœ์ข… war ํŒŒ์ผ ์ƒ์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ
7 maven-surefire-ํ”Œ๋Ÿฌ๊ทธ์ธ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ด€๋ฆฌ
8 ๋นŒ๋“œ ๋ฒˆํ˜ธ-maven-ํ”Œ๋Ÿฌ๊ทธ์ธ ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ƒ์„ฑ

๊ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๋‚˜๋ฆ„๋Œ€๋กœ ํฅ๋ฏธ๋กญ์ง€๋งŒ ๋ชจ๋‘ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ธ ์ปดํŒŒ์ผ ๊ด€๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1.2 ์ปดํŒŒ์ผ ํ”Œ๋Ÿฌ๊ทธ์ธ maven-compiler-plugin

์ปดํŒŒ์ผ๋Ÿฌ ๋ฒ„์ „์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ maven-compiler-plugin. ๊ธฐ๋ณธ ์„ค์ •์ด ์žˆ์ง€๋งŒ ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค์‹œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฒ„์ „์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ Java ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ฒ„์ „๊ณผ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” 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ํ•˜๋ฉด ์†Œ์Šค์˜ Java ๋ฒ„์ „์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” targetํด๋ž˜์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๋ ค๋Š” Java ์‹œ์Šคํ…œ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋˜๋Š” Java ๋จธ์‹  ๋ฒ„์ „์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์€ 1.3์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ encodingํ•˜๋ฉด Java ํŒŒ์ผ์˜ ์ธ์ฝ”๋”ฉ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฅผ ํ‘œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค UTF-8. ์ด์ œ ๊ฑฐ์˜ ๋ชจ๋“  ์†Œ์Šค๊ฐ€ UTF-8. ๊ทธ๋Ÿฌ๋‚˜์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์šด์˜ ์ฒด์ œ์˜ ํ˜„์žฌ ์ธ์ฝ”๋”ฉ์ด ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. Windows์˜ ๊ฒฝ์šฐ ์ธ์ฝ”๋”ฉ์ž…๋‹ˆ๋‹ค Windows-1251.

๋นŒ๋“œ ์ปดํ“จํ„ฐ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ Java๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ ๋ฐ/๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ JAVA_HOME๊ทธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋งŒ ๋ณ€์ˆ˜์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Java ๋จธ์‹ ์—๋Š” OpenJDK, OracleJDK, Amazon JDK ๋“ฑ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ๊ฐ€ ํด์ˆ˜๋ก ๊ตฌ์กฐ๊ฐ€ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ javac ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ด ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ์—๋Š” maven-compiler-plugin๋‘ ๊ฐ€์ง€ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • compiler:compileโ€“ ์†Œ์Šค ์ปดํŒŒ์ผ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์™€ ์—ฐ๊ฒฐ๋จ
  • compiler:testCompileโ€“ ํ…Œ์ŠคํŠธ ์ปดํŒŒ์ผ, ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์ค„์—์„œ 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์œผ๋กœ ์ž์‹ ๋งŒ์˜ jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด maven-jar-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>

์ฒซ์งธ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋“ค์–ด๊ฐˆ ํŒŒ์ผ๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์„ ํŒŒ์ผ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. <include>์„น์…˜์˜ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ธ ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก์„<includes> ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

๋‘˜์งธ, ๊ฐ jar์—๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ( MANIFEST.MF ํŒŒ์ผ )๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๋ฏ€๋กœ ๊ฐ€์ ธ์˜ฌ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํƒœ๊ทธ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค <manifestFile>.

๋งˆ์ง€๋ง‰์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž์ฒด์ ์œผ๋กœ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ํƒœ๊ทธ ๋Œ€์‹  ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ณ  ํ–ฅํ›„ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์ • <manifestFile>ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . <manifest>์˜ˆ:

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

ํƒœ๊ทธ๋Š” <addClasspath>๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์ถ”๊ฐ€ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค CLASSPATH.

ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ <classpathPrefix>ํ•˜๋ฉด ๊ฐ ๋ฆฌ์†Œ์Šค ์•ž์— ์ ‘๋‘์‚ฌ(์˜ˆ์ œ lib์—์„œ)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋ฅผ ์ง€์ •ํ•˜๋ฉด <classpathPrefix>๋ณ„๋„์˜ ํด๋”์— ์ข…์†์„ฑ์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” ์†์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์–ด๋”˜๊ฐ€์— ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ ๋งŽ์€ ๋†€๋ผ์›€์ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํƒœ๊ทธ๋Š” <mainClass>๊ธฐ๋ณธ ์‹คํ–‰ ๊ฐ€๋Šฅ ํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. โ€œ ๋ฉ”์ธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ", - ๋ฌผ์–ด. ๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ ๊ฒƒ์€ Java ๋จธ์‹ ์ด Java ํด๋ž˜์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ jar ํŒŒ์ผ์— ์˜ํ•ด ์ง€์ •๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์‹œ์ž‘ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

1.4 ๋นŒ๋“œ ๋ฒˆํ˜ธ ์ƒ์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ buildnumber-maven-plugin

์ข…์ข… jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ war ํŒŒ์ผ์—๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๋ฒ„์ „, ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฒ„์ „ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ข…์†์„ฑ ๊ด€๋ฆฌ์— ์œ ์šฉํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์ˆ˜์ •๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „๊ณผ ์˜ค๋ฅ˜๊ฐ€ ์ถ”๊ฐ€๋œ ๋ฒ„์ „์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์ด ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ํฌํ•จ ๋œ ํŠน์ˆ˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  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>

์œ„์˜ ์˜ˆ์—์„œ ์„ธ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค . ๋‘˜์งธ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋‹จ๊ณ„(์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„) ์ค‘์— ์‹คํ–‰๋˜๊ณ  ๋นŒ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ง€์ •๋ฉ๋‹ˆ๋‹ค ${buildNumber}.

์…‹์งธ, ์ด ์–ด์…ˆ๋ธ”๋ฆฌ ๋ฒˆํ˜ธ์˜ ํ˜•์‹์ด ํ‘œ์‹œ๋˜๋ฉฐ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ํ•จ๊ป˜ ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์˜ ๋ฒ„์ „ project.version๊ณผ ํ…œํ”Œ๋ฆฟ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ํ˜•์‹์€ Java ํด๋ž˜์Šค์— ์˜ํ•ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค MessageFormat.