๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์˜ค๋ฅ˜ ํ•ด๊ฒฐ

[Maven] pom.xml์— ์„ค์ •ํ•œ plugin์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

by syLim___ 2024. 9. 23.
728x90

โœ… ์˜ค๋ฅ˜

pom.xml ํŒŒ์ผ์— Maven plugin ์ค‘

`maven-dependency-plugin` ๊ณผ `maven-jar-plugin` ์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋Š”๋ฐ,

ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

๋ถ„๋ช…ํžˆ <project><build>ํ•˜์œ„์˜ <plugins> ํƒœ๊ทธ์—

๊ฐ๊ฐ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—

 

jar ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•์ด ์™„๋ฃŒ๋œ ์‹œ์ ์—์„œ๋Š” `target/` ํ•˜์œ„์— `libs`๋ผ๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์ƒ๊ธฐ๊ณ ,

๊ทธ ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” ์ถ”๊ฐ€ํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด jar ํ˜•ํƒœ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ target/libs ๋””๋ ‰ํ† ๋ฆฌ ์ž์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.


 

์„ค์ •๋Œ€๋กœ ์ œ๋Œ€๋กœ ๋™์ž‘ํ–ˆ๋‹ค๋ฉด, mvn clean package ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋กœ๊ทธ์—๋„ ๋ถ„๋ช…ํžˆ

 

์ด๋Ÿฐ ์‹์œผ๋กœ target/libs ํ•˜์œ„์— jarํŒŒ์ผ์„ copyํ•˜๋Š” ์ค‘์ด๋ผ๋Š” ๋กœ๊ทธ๊ฐ€ ์ฐํ˜€์•ผ ํ•˜๋Š”๋ฐ

์„ค์ •ํ•ด์ค€ copy-dependencies ์™€ ๊ด€๋ จ๋œ ๋กœ๊ทธ๊ฐ€ ์ „ํ˜€ ์ฐํžˆ์ง€ ์•Š์•˜๋‹ค.

 

๊ทธ๋ž˜์„œ ์ƒ์„ฑ๋œ jar ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด NoClassDefFoundError๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

๋„ˆ๋ฌด๋‚˜๋„ ๋‹น์—ฐํ•˜๊ฒŒ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์ด๋‹ค.

 

โœ… ์›์ธ๊ณผ ํ•ด๊ฒฐ

๋ฌธ์ œ์˜ ์›์ธ์€ pom.xml์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ์ž˜๋ชป ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ pom.xml ํŒŒ์ผ์„ ์ž์„ธํžˆ ๋“ค์—ฌ๋‹ค๋ณด๋‹ˆ

plugin ์„ค์ •์ด <project><build><plugins> ํ•˜์œ„์— ์žˆ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

<project><build><pluginManagement><plugins> ํ•˜์œ„์— ์žˆ์—ˆ๋‹ค.

 


 

๊ทธ๋ ‡๋‹ค๋ฉด <pluginManagement> ํƒœ๊ทธ๋Š” ๋„๋Œ€์ฒด ๋ญ˜๊นŒ?

 

<pluginManagement> ํƒœ๊ทธ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์ž์‹ ํ”„๋กœ์ ํŠธ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ๊ธฐ๋ณธ ์„ค์ •์„ ์ „๋‹ฌํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ,

<pluginManagement> ํƒœ๊ทธ ์•ˆ์— ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ž์‹ ํ”„๋กœ์ ํŠธ์—์„œ ๋”ฐ๋กœ ์ •์˜๋˜์ง€ ์•Š์œผ๋ฉด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

์ฆ‰ <pluginMangement> ํƒœ๊ทธ ์•ˆ์— ์„ค์ •ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์€ ์‹คํ–‰์ด ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!

 


๊ทธ๋ž˜์„œ ๋ชจ๋“  plugin ์„ค์ •์„ <project><build><plugins>๋กœ ์˜ฎ๊ฒจ์ฃผ์—ˆ๋‹ค. .

 

mvn package ๋ช…๋ น์–ด๋กœ jar ํŒŒ์ผ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ž, ๋‚ด๊ฐ€ ์„ค์ •ํ•œ๋Œ€๋กœ target/libs ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ํ•˜์œ„์— ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ jar ํŒŒ์ผ๋“ค์ด ๋ณต์‚ฌ๋˜์–ด ๋“ค์–ด๊ฐ”๋‹ค.

๋ฌผ๋ก  ํ”„๋กœ๊ทธ๋žจ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค.

 

โœ… ์ถ”๊ฐ€ ๊ณ ์ฐฐ

ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ maven-archetype-quickstart๋กœ ์ƒ์„ฑํ–ˆ์—ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ๋นŒ๋“œํ•  ๋•Œ๋ถ€ํ„ฐ pom.xml์—

<build><pluginManagement> ํƒœ๊ทธ์™€ ํ•˜์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •๋“ค์ด ์ƒ๊ฒผ๊ณ 

<pluginManagement> ํƒœ๊ทธ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ฃผ์„์ด ์ ํ˜€์žˆ์—ˆ๋‹ค.

Lock down plugins versions to avoid using Maven defaults (may be moved to parent pom)

 

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์ „์—๋Š” ์ฃผ์„ ๋‚ด์šฉ์ด ์ดํ•ด๋„ ์•ˆ ๋˜๊ณ  ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์ง€ ์•Š์•„์„œ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ”์—ˆ๋‹ค.

 

๋‹ค์‹œ ๋ณด๋‹ˆ, ์ž๋™์œผ๋กœ maven ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ parent ํ”„๋กœ์ ํŠธ์˜ ๋””ํดํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •๋“ค์ด ํ•จ๊ป˜ ์ƒ์„ฑ๋œ ๊ฒƒ์ด๊ณ ,

"์ด๋Ÿฌํ•œ ์„ค์ •๋“ค ๋•Œ๋ฌธ์— ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜๋„๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ด๋Ÿฌํ•œ ์„ค์ •์€ parent ํ”„๋กœ์ ํŠธ์˜ pom.xml๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค" ์ •๋„๋กœ ํ•ด์„ํ•˜๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

 

 

 

728x90