๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy/Others

[Maven] Maven์˜ ๊ฐœ๋… / Maven ์„ค์น˜ํ•˜๊ณ  IDE ์—†์ด Maven ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๊ธฐ / Build LifeCycle๊ณผ Phase

* Maven์˜ ๊ฐœ๋…

 

 

Maven์ด๋ž€ ๋นŒ๋“œ(build) ํˆด์˜ ์ผ์ข…์ด๋‹ค. ๋นŒ๋“œ๋ž€ ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ JVM์ด๋‚˜ WAS๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ํŒจํ‚ค์ง• ํ•˜๋Š” ๊ณผ์ • ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋งํ•œ๋‹ค. ๋ฉ”์ด๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •, ์ฝ”๋“œ ์ž‘์—… ๋“ฑ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํด๋ฆฝ์Šค์™€ ๊ฐ™์€ IDE์—์„œ๋„ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ IDE๋Š” ๋นŒ๋“œ ํˆด๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค. ๋นŒ๋“œ ํˆด์ด ๋นŒ๋“œ ๊ณผ์ •์—์„œ์˜ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ • ๋“ฑ์— ๊ด€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด IDE๋Š” ๋” ๋‹ค์–‘ํ•œ ๋ฒ”์œ„๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๋” ํฐ ๋‹จ์œ„์˜ ๋„๊ตฌ์ด๋‹ค. IDE๋Š” ํ˜•์ƒ๊ด€๋ฆฌ, ๋””๋ฒ„๊ฑฐ, ์ปดํŒŒ์ผ๋Ÿฌ, ํƒ์ƒ‰๊ธฐ, ์ฝ˜์†”, ํŽธ์ง‘๊ธฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค. Maven์€ ํŠน์ •ํ•œ IDE์— ์ข…์†๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์ดํด๋ฆฝ์Šค, Visual Studio Code, IntellijJ ๋“ฑ ์—ฌ๋Ÿฌ IDE๋Š” ์ „๋ถ€ ๋ฉ”์ด๋ธ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

* Maven ์„ค์น˜ํ•˜๊ธฐ

 

maven.apache.org/download.cgi ์—์„œ Binary zip archive ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ (apache-maven-3.6.3-bin.zip)

C:\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin\mvn ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•œ ํ›„ ์ฝ˜์†”์ฐฝ์—์„œ ์‹คํ–‰ํ•œ๋‹ค. 

์‹œ์Šคํ…œ ๋ณ€์ˆ˜์— M2_HOME์— apache-maven-3.6.3 ์„ค์ •ํ•˜๊ณ (bin ํด๋”๋ณด๋‹ค ํ•˜๋‚˜ ์ƒ์œ„), path์— %M2_HOME%\bin์„ ์„ค์ •ํ•œ๋‹ค. ์ฝ˜์†”์ฐฝ์—์„œ mvn -version์„ ์ž…๋ ฅํ•˜์—ฌ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

* mvn -version ์‹คํ–‰ ์—๋Ÿฌ

๋”๋ณด๊ธฐ

โ€ป The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

 

๋‚˜์˜ ๊ฒฝ์šฐ ์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋Š”๋ฐ, JAVA_HOME์— jdk๊ฐ€ ๋‘ ๊ฐ€์ง€ ์„ค์ •๋˜์–ด ์žˆ์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค.

 

JAVA_HOME

 

Path

์ด์œ ๋Š” ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ฝ˜์†”์ฐฝ์— set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_261๋ฅผ ์ž…๋ ฅํ•ด์„œ ๋‹ค์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ํ™•์ธํ–ˆ๋”๋‹ˆ ์ž˜ ๋˜์—ˆ๋‹ค. ์ผ์‹œ์ ์ธ ํ•ด๊ฒฐ๋ฒ• ๊ฐ™๊ธฐ๋Š” ํ•œ๋ฐ ๋‹ค๋ฅธ ๊ฑธ ๊ฑด๋“œ๋ฆฌ์ž๋‹ˆ ํ˜น์—ฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ๊นŒ๋ด ์ผ๋‹จ์€ ์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค.

 

 

* IDE ์—†์ด Maven ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ

 

 

์ƒˆ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ํ›„, 

mvn archetype:generate -DgroupId=com.newlecture -DartifactId=javaprj -DarchetypeArtifactId=maven-archetype-quickstart ์ž…๋ ฅ

 

archetypeArtifactId ์˜ต์…˜์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  maven-archetype-quickstart ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด๊ฐ€ ๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (=>๋ฉ”์ด๋ธ์˜ ํŠน์ง•, ์žฅ์ )

 

 

 

โ€ป ์ฐธ๊ณ . ์ฝ˜์†”์ฐฝ cd(change directory) ๊ด€๋ จ ๋ช…๋ น์–ด

๋”๋ณด๊ธฐ

cd.. => ํด๋” ํ•œ ๋‹จ๊ณ„ ์•„๋ž˜๋กœ ์ด๋™

 

cd ํด๋”๋ช… => ์›ํ•˜๋Š” ์ƒ์œ„ ํด๋”๋กœ ์ด๋™ (ex. C๋“œ๋ผ์ด๋ธŒ ์•ˆ์—์„œ cd maven)

 

cd\ => ๋ฃจํŠธ ํด๋”๋กœ ์ด๋™

 

d: => D๋“œ๋ผ์ด๋ธŒ๋กœ ๋ณ€๊ฒฝ (๋˜๋Š” c:)

 

 

์—”ํ„ฐ์ณ์„œ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค์šด๋กœ๋“œ, ์ž…๋ ฅ ๊ณผ์ •์ด ์ง„ํ–‰๋˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚ฌ๋‹ค๋ฉด ์—ฐ๋‘์ƒ‰ BUILD SUCCESS๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ(ํ•ด๋‹น ํด๋” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ cmd ์ž…๋ ฅ, tree ๋ช…๋ น์–ด๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค)

 

dir์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํƒ์ƒ‰๊ธฐ๋ฅผ ์—ด์–ด์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

javaprj ๋ฐ‘์—๋Š” pom.xml์ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉฐ, javaprj\src\main\java\com\newlecture ์•ˆ์— App.java๋ผ๋Š” ๊ธฐ๋ณธ ์†Œ์Šค๋„ ์ƒ์„ฑ๋˜์—ˆ๋‹ค. (Hello world!)

์ฝ˜์†”์ฐฝ์—์„œ ์ปดํŒŒ์ผ ๋“ฑ์˜ ์ž‘์—…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” pom.xml์ด ์žˆ๋Š” ๊ฒฝ๋กœ, ์ด ๊ฒฝ์šฐ javaprj์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

App.java์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ mvn compile์„ ์ž…๋ ฅํ•˜๋ฉด ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นŒ๋“œ ์‹คํŒจํ–ˆ์„ ๊ฒฝ์šฐ pom.xml์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•˜๋ฉด ๋œ๋‹ค.

 

  <properties>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
  </properties>

 

์ฝ˜์†”์ฐฝ์—์„œ mvn package๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํŒจํ‚ค์ง• ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ target ํด๋” ์•ˆ์— jar ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

 

target\classes ์•ˆ์˜ ํด๋ž˜์Šค ํŒŒ์ผ๋กœ๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๊ณ , jar ํŒŒ์ผ๋กœ๋„ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

1) ํด๋ž˜์Šค ํŒŒ์ผ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ธฐ

 

target\classes ํด๋” ์•ˆ์—์„œ [ํŒจํ‚ค์ง€๋ช….ํŒŒ์ผ๋ช…]์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

 

2) jar ํŒŒ์ผ ์ด์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ธฐ

 

-cp์œผ๋กœ ํด๋ž˜์Šค ํŒจ์Šค ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •ํ•˜๊ณ  jar ํŒŒ์ผ ์† com.newlecture.App java ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค.

 

 

 

 

* Build LifeCycle๊ณผ Phase๋“ค

 

mvn compile, mvn test, mvn package ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ, ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง• ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ๋‹จ๊ณ„(phase)๋ผ๊ณ  ํ•œ๋‹ค. compile, test, package๊ฐ€ ์ˆ˜ํ–‰ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•œ๋‹ค. 

 

Maven์˜ ๋‹จ๊ณ„๋“ค

 

์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ๊ทธ ์•ž ๋‹จ๊ณ„๋ถ€ํ„ฐ ์ „๋ถ€ ์‹คํ–‰๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด mvn compile์„ ํ–ˆ๋‹ค๋ฉด validate, initialize ๋“ฑ ์•ž ๋‹จ๊ณ„๋“ค์€ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋“ค์€ pom.xml์— ์ •์˜๋œ <packaging>์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋‚˜ (pom, jar, war ๋“ฑ...) ๋Œ€๋ถ€๋ถ„ ๋น„์Šทํ•œ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

pom(project object model) ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ชจ๋ธ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. pom์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ์„ค์ •์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉ”์ด๋ธ์€ ๊ฐ ๋‹จ๊ณ„๋ฅผ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐฉ์‹์œผ๋กœ ๋Š์–ด๋†“์•˜๋‹ค. ๋‹จ๊ณ„๋งˆ๋‹ค ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋”ฐ๋กœ ์žˆ์–ด์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ฒ˜๋Ÿผ ๋บ๋‹ค ๊ฝ‚์•˜๋‹ค ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.

 

 

 

์œ„ ๊ทธ๋ฆผ์—์„œ ํŒŒ๋ž€ ๊ธ€์”จ(process-resources, compile ๋“ฑ) ๋‹จ๊ณ„๋Š” ์–ด๋– ํ•œ ์„ค์ •๋„ ํ•˜์ง€ ์•Š์•˜์–ด๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜๋Š” ๋‹จ๊ณ„์ด๋ฉฐ, ๊ฐ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ(Plug-in)์ด ๋งคํ•‘๋˜์–ด ์žˆ๋‹ค. ์„ค์ •๋˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋‹จ๊ณ„๋“ค์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์€ pom.xml์—์„œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ ์„ค์ •๋œ ๋‹จ๊ณ„๋„ pom.xml์—์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์„ Goal์ด๋ผ๊ณ  ํ•œ๋‹ค(์—ฐ๋‘์ƒ‰ ๊ธ€์”จ).

 

 

 

mvn hepl:describe -Dcmd=compile ๋ช…๋ น์–ด๋กœ ๋‹จ๊ณ„๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

(๋ฉ”์ด๋ธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ฐธ๊ณ . maven.apache.org/plugins/index.html)

 

 

๋ฉ”์ด๋ธ๋งŒ ์‚ฌ์šฉํ•ด์„œ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ๋””๋ฒ„๊ทธ ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ ์ดํ›„์—๋Š” ์ดํด๋ฆฝ์Šค์—์„œ ๋ฉ”์ด๋ธ์„ ์–น์–ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.