Mavenpom.xml ํ์ผ ๊ตฌ์กฐGoal ์ ๋ฆฌgoal ์ข
๋ฅVersion ScopeGradleimplementsapi, compile(deprecated)compileOnlyruntimeOnly๐ ๋ด์ผ๋ ์ฌ์ดํธ
Maven
- ๋ฉ์ด๋ธ ์์ ์ ๋ณต: https://wikidocs.net/book/1910
- Maven ๋ช ๋ น์ด ๋ชจ์
//== Maven ๋ช ๋ น์ด ==// // ๋น๋๋ฅผ ํ๊ธฐ์ ๋น๋ ๊ฒฐ๊ณผ ์์น๋ฅผ ๋น์ฐ๋ ๋ช ๋ น์ด, ์ฝ์ ๋ช ๋ น์ฐฝ์์ ์ํ mvn clean // compile ์ํ ๋ช ๋ น์ด // compile ํ target ๋๋ ํ ๋ฆฌ๊ฐ ์์ฑ๋๋ฉฐ ์ปดํ์ผ๋ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ง๋ค์ด์ง // target/classes/HelloWorld.class ํ์ผ ํ์ธ ๊ฐ๋ฅ mvn compile // ?? ์ด๊ฑด ๋ญ์ฌ?? // ์๋์ ๋ช ๋ น์ด๋ก ์คํํ๋ฉด Maven Hello World! ๊ฐ ์ ์์ ์ผ๋ก ์ฐํ๋ค. // -cp : ํด๋์ค ํจ์ค ๊ฒฝ๋ก java -cp tartget/classes HelloWorld // java ํจํค์ง ๋ช ๋ น์ด // target/HelloWorld-1.0-SNAPSHOT.jar ํ์ผ์ด ์์ฑ๋๋ค. mvn package java -jar target/HelloWorld-1.0-SNAPSHOT.jar HelloWorld
pom.xml ํ์ผ ๊ตฌ์กฐ
- ํ๋ก์ ํธ ์ ๋ณด
- modelVersion
- groupId
- artifactId
- version
- packaging
- properties
- maven ๋ด๋ถ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋ ์์ ๊ฐ์ ์ ์ํ ๋ ์ฌ์ฉ
- Dependencies(์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ณด)
- project ํ๊ทธ ๋ฐ๋ก ํ์
- ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ณด๋ฅผ ํฌํจํจ
- ์ต์
groupId
,artifactId
,version
์ ๋ณด๊ฐ ํ์ํจ dependencies
์์ ์๋ ์๋ถ โdependencyโ๊ฐ ๊ธฐ์ ๋จ
- ๋น๋(
<build>
) ์ ๋ณด - project ํ๊ทธ ๋ฐ๋ก ํ์
- plugins: ๋น๋์์ ์ฌ์ฉํ ํ๋ฌ๊ทธ์ธ
- ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
- Repository
- ์์กด์ฑ์ ๋ค์ด๋ก๋ ๋ฐ์ ์์น์ repository
- ๊ธฐ์ ๋์ง ์์ ์ ๊ธฐ๋ณธ์ ์ธ ์์น
- ๋ค์์ <repository> ๊ธฐ์ ๊ฐ๋ฅ
- ํ์ฌ ๋ด๋ถ์ repository๋ฅผ ๊ธฐ์ ํ๊ธฐ๋ ํ๋ค.
- nexus
- artifactory๋ฅผ ์ด์ฉ
- Plugin Repository
- maven plugin์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๋ ์ ์ฅ์ ์์น๋ฅผ ๊ธฐ์
- ๋ฐฐํฌ
deploy
goal์ ์คํํ์ ์, ๋ฐฐํฌ๋๋ ์์น๋ฅผ ๊ธฐ์ ํจ- url ํญ๋ชฉ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ฌ ๋ด๋ถ์ ์ค์นํ repository url์ด ๊ธฐ์ ๋๋ค.(nexus, artifactory ๋ฑ์ผ๋ก ์ค์น๋..)
<distributionManagement> <repository> <id>releases-repo</id> <name>Releases Repository</name> <url>์ผ๋ฐ์ ์ธ ํ์ฌ ๋ด๋ถ repository url</url> </repository> <snapshotRepository> <id>snapshots-repo</id> <name>Snapshots Repository</name> <url>์ผ๋ฐ์ ์ธ ํ์ฌ ๋ด๋ถ repository url</url> </snapshotRepository> </distributionManagement>
Goal ์ ๋ฆฌ
- Goal
- Maven์ด ํํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋์์ ์ํํ๋ ๋ช ๋ น์ Goal์ด๋ผ๊ณ ํจ.
- ์คํ๋ฐฉ์, ์ฒด์ธ ํํ๋ก ์คํ ๊ฐ๋ฅ
mvn [goal๋ช ๋ น์ด] [goal๋ช ๋ น์ด] [goal๋ช ๋ น์ด]
goal ์ข ๋ฅ
- clean : ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ธ
target
๋๋ ํ ๋ฆฌ ์ญ์
- compile : ๋ชจ๋ ์์ค ์ปดํ์ผ, ๋ฆฌ์์ค ํ์ผ์
target/classes
๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ
- package :
compile
์ํ ํ, ํ ์คํธ ์ํ,<packaging>
์ ๋ณด์ ๋ฐ๋ผ ํจํค์ง ์ํ
- install :
package
- deploy :
install
์ํ ํ, ๋ฐฐํฌ ์ํ, ์ฌ๊ธฐ์ ๋ฐฐํฌ๋ ์น์๋ฒ์ ๋ฐฐํฌ๊ฐ ์๋๋ค. ํ์ฌ repo์ ๋ฐฐํฌ๋ค. - ์๋์ ๊ฐ์ด
distributionManagement
ํญ๋ชฉ์ด ๊ธฐ์ ๋์ด์ผ ํ๋ค.
...์๋ต <distributionManagement> <repository> <id>releases-repo</id> <name>Releases Repository</name> <url>ํ์ฌrepository์ฃผ์(๋ฅ์์ค)</url> </repository> <snapshotRepository> <id>snapshots-repo</id> <name>Snapshots Repository</name> <url>ํ์ฌrepository์ฃผ์(๋ฅ์์ค)</url> </snapshotRepository> </distributionManagement>
Version
- SNAPSHOT
- ex) 1.0-SNAPSHOT
- ๊ฐ๋ฐ์งํ ์ค์์ ๋ํ๋ธ๋ค.
- version์ด ๋ณ๊ฒฝ๋์ง ์์๋๋ผ๋ ํญ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ค์ด๋ก๋ ํ๋ค.
- ์๋ฌธ์๋ก๋ ์๋ํ์ง ์๋๋ค.
- ํน๋ณ ๋ค์ด๋ฐ์ด ์๋ ๊ฒฝ์ฐ
- ex) 1.0.1
- ํน๋ณ ๋ค์ด๋ฐ์ด ์๋ ๊ฒฝ์ฐ๋ release ์ํ๋ฅผ ์๋ฏธ
- ์ผ๋ฐ์ ์ธ ๊ด์ฉ์ด๊ตฌ๋ maven์ ํน๋ณํ ๊ธฐ๋ฅ์ ๋ถ์ฌํ์ง ์๋๋ค. ์ฆ SNAPSHOT์๋ง ํน๋ณํ ๋์์ ํ๋ค.
- ex) 1.0-RC1 (release candidate)
- ex) 1.0-M1 (milestone release)
- ex) 1.0-RELEASE (release)
Scope
- dependency ํ์์ ํฌํจ๋๋ ํญ๋ชฉ
- ํด๋น dependency๊ฐ ํฌํจ๋๋ ๋ฒ์์ ๋ํ ํ์
- scope ์ข ๋ฅ
- compile :
- ๊ธฐ๋ณธ scope. ๋ฏธ์ ๋ ฅ์์๋ ๊ธฐ๋ณธ ์ ์ฉ
- ๋ชจ๋ ์ํฉ์์ ํฌํจ๋จ
- provided :
- compile๊ณผ ์ ์ฌํ๊ฒ ๋ชจ๋ ์ํฉ์์ ์ํ๋๋ค
- ํ์ง๋ง, ๋ค๋ฅธ ์ธ๋ถ ์ปจํ ์ด๋์์ ๊ธฐ๋ณธ ์ ๊ณต๋๋ API์ธ๊ฒฝ์ฐ provided๋ก ์ง์ ์ ๋ง์ง๋ง ํจํค์งํ ๋ ํฌํจ๋์ง ์์
- ์๋ฅผ ๋ค๋ฉด tomcat์์ ๊ธฐ๋ณธ์ ์ผ๋ก servlet api๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ servlet api๋ฅผ provided๋ก ์ง์ ํ๋ฉด ํจํค์ง์ ์ ์ธ๋๋ค.
- runtime :
- ์ปดํ์ผ ์์๋ ๋ถํ์ ์คํ์์ ํ์ํ ๊ฒฝ์ฐ.
- ๋ฐํ์ ๋ฐ ํ ์คํธ ์ classpath์ ์ถ๊ฐ ๋์ง๋ง, ์ปดํ์ผ์์๋ ์ถ๊ฐ ๋์ง ์์
- test : ํ ์คํธ์์๋ง ์ฌ์ฉ
- system :
- provided์ ์ ์ฌ
- system์ ํน์ path๋ฅผ ์ฐธ์กฐํ๋๋ก ์ง์
- Maven์ central repository๋ฅผ ์ฌ์ฉํ์ง ์์
- import :
- scope๋ dependencyManagement ์น์ ์์ pom์ ์์กด๊ด๊ณ์ ๋ํด ์ฌ์ฉ
Gradle

java-library ํ๋ฌ๊ทธ์ธ์ด gradle์ ์ ์ฉ๋ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌ์ฑ. ์ถ์ฒ: Gradle Java Library Plugin
implements
- ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ ํด๋น ๋ชจ๋์ ์์กดํ๊ณ ์๋ ๋ชจ๋๋ค ๋ํ ์ฌ๋น๋

A โ B โ C ์ผ ๋, A์์ C ์ ๊ทผ ๋ถ๊ฐ๋ฅ
B ์์ ์, A๊น์ง ์ฌ๋น๋
api, compile(deprecated)
- ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ ํด๋น ๋ชจ๋์ ์์กดํ๊ณ ์๋ ๋ชจ๋๋ค ๋ํ ์ฌ๋น๋ ๋ชจ๋์์ api๋ compile์ ์ฌ์ฉํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๋ฉด, ์์กดํ๋ ๋ชจ๋์๋ ๊ฐ์ ธ์ ์ง๋ค.

A(api) โ B(api) โ C
B๋ง ๋
ธ์ถ๋์ด์ผ ๋๋๋ฐ, C์ ์ธํฐํ์ด์ค๊น์ง ๊ฐ์ด ๋
ธ์ถ
- C ์์ ์, A์ B ๋ชจ๋ ์ฌ๋น๋
- api ์ข ์์ฑ์ด ๋ง์ด ์์ผ๋ฉด ๋น๋ ์๊ฐ์ด ์๋นํ ์ฆ๊ฐ
- ์ข ์์ฑ์ API๋ฅผ ๋ณ๋์ ๋ชจ๋์ ๋ ธ์ถ์ํค๊ณ ์ถ์ ๊ฒ์ด ์๋๋ผ๋ฉด implementation ์ถ์ฒ
- Leak ๋ฐ์ โ B๋ฅผ ๋น๋ํ๋ฉด์ ์ด๋ฏธ ๋ค์ด๊ฐ C๊ฐ ์ค๋ณต์ผ๋ก A์๋ ์ถ๊ฐ๋๊ธฐ ๋๋ฌธ
compileOnly
- ์ปดํ์ผ ์์๋ง ํ์ํ๊ณ , ๋ฐํ์ ์์๋ ๋ถํ์ํ ๊ฒฝ์ฐ
- ์ปดํ์ผํ ๋๋ ํด๋น ์ข ์์ฑ์ ์ฌ์ฉํ๊ณ build ์์๋ ์ ์ธ
- build ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค๋ ์ฅ์
- compileClassPath์๋ง ์ฌ์ฉ๋๊ณ ์๋น์์๊ฒ ๋ ธ์ถ๋์ง ์๋๋ค.
(compileClassPath : ์ปดํ์ผ ์์๋ง ํ์ํ class path)
- ์์๋ก Lombok : ์ปดํ์ผ ๋ ๋ง๋ค์ด์ง๊ณ ๋ฐํ์ ๋๋ ์ฌ์ฉ๋์ง ์์
runtimeOnly
- ์ปดํ์ผ ์์๋ ๋ถํ์ ํ๊ณ , ๋ฐํ์ ์์๋ง ํ์ํ ๊ฒฝ์ฐ
- ์ปดํ์ผ ์๊ฐ์ด ๋นจ๋ผ์ง๋ ์ฅ์
- runtimeClassPath์๋ง ์ฌ์ฉ๋๊ณ ์๋น์์๊ฒ๋ ๋ ธ์ถ ๋๋ค.
runtimeClassPath : ๋ฐํ์ ์์ ํ์ํ class path
- ์์๋ก h2, mysql, log4j