Maven
์๋ฐ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์๋ํ ํด์ฃผ๋ Build Tool
๋ฉ์ด๋ธ ํ์ฉ ํจํด
Build
- ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ค.
- ํ ์คํธ ์ฝ๋๋ฅผ ์ปดํ์ผ ํ๋ค.
- ๊ธฐํ ํจํค์ง ์์ฑ์ ์ํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋ค.
Package
- ๋ฐฐํฌ ๊ฐ๋ฅํ jar, war, exe ํ์ผ ๋ฑ์ ์์ฑํ๋ค.
Test
- ๋จ์ ํ ์คํธ(Unit Test) ๋ฑ์ ์คํํ๋ค.
- ๋น๋ ๊ฒฐ๊ณผ๊ฐ ์ ์์ ์ธ์ง ์ ๊ฒํ๋ค.
Report
- ๋น๋/ํจํค์ง/ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํ๊ณ , ๋น๋ ์ํ ๋ฆฌํฌํธ๋ฅผ ์์ฑํ๋ค.
Release
- ๋น๋ ํ ์์ฑ๋ ์ํฐํฉํธ(artifact)๋ฅผ ๋ก์ปฌ ํน์ ์๊ฒฉ ์ ์ฅ์์ ์ ์ฅ(๋ฐฐํฌ)ํ๋ค.
Key Concept
Plugin
- ํ๋ฌ๊ทธ์ธ ์คํ ํ๋ ์์ํฌ
- ํ๋ฌ๊ทธ์ธ ๋ฉ์ปค๋์ฆ์ ์ํด ๊ธฐ๋ฅ์ด ํ์ฅ(๋ชจ๋ ์์ ์ ํ๋ฌ๊ทธ์ธ์ด ์ํ๋๋ค)
- ๋ชจ๋ ์์ ์ ํ๋ฌ๊ทธ์ธ์ด ์ํ๋๋ค
- ํ๋ฌ๊ทธ์ธ์ ๋ค๋ฅธ ์ฐ์ถ๋ฌผ(artifacts)์ ๊ฐ์ด ์ ์ฅ์์์ ๊ด๋ฆฌ๋๋ค.
- ํ๋ฌ๊ทธ์ธ์ ๊ณจ(goal)์ ์งํฉ์ด๋ค.
Lifecycle
- ์ผ๋ จ์ ๋จ๊ณ๋ฅผ ๊ณจ(goal)
- ๋ ผ๋ฆฌ์ ์ธ ์์ ํ๋ฆ์ธ ๋จ๊ณ์ ์งํฉ์ด ๋ผ์ดํ์ฌ์ดํด(Lifecycle)
Dependency
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด๋ก๋ ์๋ํ
- ๋ฉ์ด๋ธ์ ์ ์ธ์
- ๋ฉ์ด๋ธ์ด ๊ด๋ฆฌ
Profile
- ์๋ก ๋ค๋ฅธ ๋์ ํ๊ฒฝ(target environment)๋ฅผ ์ํ ๋ค๋ฅธ ๋น๋ ์ค์
- ๋ค๋ฅธ ์ด์์ฒด์
- ๋ค๋ฅธ ๋ฐฐํฌ ํ๊ฒฝ
POM
- Project Object Model
- Project ๋น ํ๋์ pom.xml ํ์ผ์ ํ๋์ฉ ๊ฐ์ง๋ค.
- ์์ ์๋ณ ๊ธฐ์ค(group id, artifact id, version)
์ค์ ํ์ผ
Setting ํ์ผ
- Maven ํด๊ณผ ๊ด๋ จ๋ ์ค์ ์ ๋ด๋น
MAVEN_HOME/settings.xml
: ๋ชจ๋ ์ฌ์ฉ์์ ์ ์ฉ๋๋์ ์ญ์ ์ธ
๋ฉ์ด๋ธ ์ค์ ์ ๋ณดUSER_HOME/.m2/setting.xml
:ํน์ ์ฌ์ฉ์
์ ์ ์ฉ๋๋ ๋ฉ์ด๋ธ ์ค์ ์ ๋ณด
์ฃผ์ํ ์ ์ ๋ณต์์ s์ ์ ๋ฌด์ด๋ค.
- ์ ์ญ์ ์ธ
settings.xml
VS ํน์ ์ฌ์ฉ์์๊ฒ ์ ์ฉ๋๋setting.xml
pom.xml
- Project Object Model
- ํ๋ก์ ํธ ๋ด ๋น๋์ค์ ์ ๋ด๋น.
- ํ๋ก์ ํธ ์ต์์์ ์กด์ฌ
- dependency ๊ด๋ฆฌ๋ ํ๋ค.
Example pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nesoy</groupId> <!-- ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ์กฐ์ง์ ๊ณ ์ ์์ด๋-->
<artifactId>demo-maven</artifactId> <!-- ํ๋ก์ ํธ๋ฅผ ์๋ณํ๋ ์ ์ผํ ์์ด๋-->
<version>1.0-SNAPSHOT</version> <!-- ํ๋ก์ ํธ ํ์ฌ ๋ฒ์ ผ์ ์๋ฏธ-->
<packaging>war</packaging> <!-- ํ๋ก์ ํธ๋ฅผ ์ด๋ค ํํ๋ก ํจํค์งํ ์ง ๊ฒฐ์ ํ๋ค. jav, war, ear, pom๋ฑ์ด ํด๋น๋๋ค.-->
<!-- ํ๋ก์ ํธ์ ์์กด๊ด๊ณ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌ -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>
์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๊ธฐ
- ์ค์ ์๊ฒฉ ์ ์ฅ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๋ฐ์ ์ ์๋ค.
- Maven Repository : https://mvnrepository.com/
- pom.xml์ dependencies Tag ์์ ์ฐ๊ณ ์ ์ฅํ๊ธฐ
<!-- ํ๋ก์ ํธ์ ์์กด๊ด๊ณ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ด๋ฆฌ -->
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
ํ์ธํ๊ธฐ
LifeCycle
Maven์ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ ์๋ ๋น๋ ์์๋ฅผ ๋ผ์ดํ์ฌ์ดํด ์ด๋ผ๊ณ ํ๋ค.
๊ธฐ๋ณธ ๋ผ์ดํ ์ฌ์ดํด
- compile : ์์ค ์ฝ๋๋ฅผ ์ปดํ์ผ
- test : ๋จ์ ํ ์คํธ ์คํ (๊ธฐ๋ณธ์ค์ ์ ๋จ์ ํ ์คํธ๊ฐ ์คํจํ๋ฉด ๋น๋ ์คํจ๋ก ๊ฐ์ฃผํจ)
- package : ์ปดํ์ผ๋ ํด๋์ค ํ์ผ๊ณผ ๋ฆฌ์์ค ํ์ผ๋ค์ war ํน์ jar์ ๊ฐ์ ํ์ผ๋ก ํจํค์ง
- install : ํจํค์งํ ํ์ผ์ ๋ก์ปฌ ์ ์ฅ์์ ๋ฐฐํฌ (USER_HOEM/.m2/)
- deploy : ํจํค์งํ ํ์ผ์ ์๊ฒฉ ์ ์ฅ์์ ๋ฐฐํฌ (nexus ํน์ maven central ์ ์ฅ์)
Clean ๋ผ์ดํ ์ฌ์ดํด
- clean : ๋ฉ์ด๋ธ ๋น๋๋ฅผ ํตํ์ฌ ์์ฑ๋ ๋ชจ๋ ์ฐ์ถ๋ฌผ์ ์ญ์
Site ๋ผ์ดํ ์ฌ์ดํด
- site : ๋ฉ์ด๋ธ ์ค์ ํ์ผ ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ํ๋ก์ ํธ์ ๋ํ ๋ฌธ์ ์ฌ์ดํธ๋ฅผ ์์ฑ
- site-deploy : ์์ฑํ ๋ฌธ์ ์ฌ์ดํธ๋ฅผ ์ค์ ๋์ด ์๋ ์๋ฒ์ ๋ฐฐํฌ
Intellij Maven Project ๋ง๋ค๊ธฐ
Maven ์ ํํ๊ธฐ
groupId, ArtifactsID ์ค์
Project ์ค์
Project Structure ๋ชจ์ต
๊ธฐ์กด์ Project์ Maven ์ถ๊ฐํ๊ธฐ
Add Framework Support ์ค์ ์ผ๋ก ๋์ด๊ฐ Maven ์ ํํ๊ธฐ
Intellij Maven Life Cycle
์คํํ๊ณ ์ถ์ Lifecycle์ ๋๋ธํด๋ฆญํ๋ฉด ์คํ์ด ๋๋ค.
Issue
Import๊ฐ ์ ์๋์ด ์๋ ๊ฒฝ์ฐ
.m2/repository
๋ก์ปฌ ์ ์ฅ์์์ ์ค์ ํ์ธํ๊ธฐ โ ์์ผ๋ฉด ์ค์ ์๊ฒฉ ์ ์ฅ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ธํ๊ธฐ
๊ฒฝ๋ก ์ค์ ์ ๋งค์ฐ ๋ฏผ๊ฐํ๋ค.
- archtype์ ํตํด ๋ง๋ค๋ฉด ๊ฒฝ๋ก ์ค์ ์ ๋ฐฉํด๋ฅผ ๋ ๋ฐ์ ์ ์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก web-resourceํ์ผ์
webapp
์ผ๋ก ์ค์ ํ๊ณ ์๋ค.
์๊ฒฉ ๋ฐฐํฌ๋ ๊ฐ๋ฅํ๋ค.
Reference
- http://dimdim.tistory.com/entry/Maven-%EC%A0%95%EB%A6%AC
- http://www.slideshare.net/ssuser5445b7/ss-56566336
- http://www.slideshare.net/sunnykwak90/ss-43767933?qid=d4b7d95c-e1f6-45e6-94e9-3d6b80b1c27b&v=&b=&from_search=1
- https://www.jetbrains.com/help/idea/2016.3/getting-started-with-maven.html#create_maven_project