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