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
.