pom.xml(프로젝트 개체 모델)이란 무엇입니까? 동적 웹 프로젝트(Java/J2EE)에서 사용할 샘플 pom.xml
게시 됨: 2021-06-25
pom.xml 파일이란?
POM은 Project Object Model
을 의미합니다. Maven의 기본 작업 단위입니다. pom.xml 파일에는 모든 구성, 종속성, 플러그인 통합 및 프로젝트 설정 지침이 포함되어 있습니다.
이것은 프로젝트에 라이브러리 종속성을 추가하는 가장 좋은 방법입니다. .jar 파일을 프로젝트 리소스 폴더에 복사하는 것은 오래된 방법입니다.
pom.xml 파일에 대해 자세히 알아보자.
가장 단순한 기본 pom.xml 파일
1 2 3 4 5 6 7 8 9 10 |
< 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 . crunchify . tutorials < / groupId > < artifactId > crunchify - tutorials < / artifactId > < version > 1.0.1 - SNAPSHOT < / version > < / project > |
pom.xml 요소를 살펴보겠습니다.
요소 | 설명 |
---|---|
프로젝트 | 요소는 설명자의 루트입니다. 다음 표에는 가능한 모든 자식 요소가 나열되어 있습니다. |
모델버전 | 이 POM이 준수하는 프로젝트 설명자의 버전을 선언합니다. 버전 4.0.0으로 설정합니다. |
그룹 ID | 프로젝트의 보편적으로 고유한 식별자입니다. 유사한 이름(예: org.apache.maven)을 가진 다른 프로젝트와 구별하기 위해 정규화된 패키지 이름을 사용하는 것이 일반적입니다. |
아티팩트 ID | 그룹 ID로 지정된 그룹 내에서 고유한 이 아티팩트의 식별자입니다. 아티팩트는 프로젝트에서 생성하거나 사용하는 것입니다. 프로젝트를 위해 Maven에서 생성한 아티팩트의 예에는 JAR, 소스 및 바이너리 배포, WAR이 포함됩니다. |
버전 | 이 프로젝트에서 생성된 아티팩트의 현재 버전입니다. |
추가 요소가 있는 pom.xml 파일
더 많은 요소가 있는 pom.xml 파일:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
< 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 . crunchify . tutorials < / groupId > < artifactId > crunchify - tutorials < / artifactId > < version > 1.0.1 - SNAPSHOT < / version > < packaging > jar < / packaging > < name > Crunchify ' s Java Tutorials < / name > < url > https : //crunchify.com</url> < build > < sourceDirectory > src < / sourceDirectory > < finalName > crunchify - tutorial < / finalName > < plugins > < plugin > < groupId > org . apache . maven . plugins < / groupId > < artifactId > maven - compiler - plugin < / artifactId > < version > 3.5.1 < / version > < configuration > < source > 15 < / source > < target > 15 < / target > < / configuration > < / plugin > < / plugins > < / build > < dependencies > < dependency > < groupId > org . glassfish < / groupId > < artifactId > javax . json < / artifactId > < version > 1.0.4 < / version > < / dependency > < dependency > < groupId > com . github . wnameless < / groupId > < artifactId > json - flattener < / artifactId > < version > 0.2.2 < / version > < / dependency > < dependency > < groupId > commons - io < / groupId > < artifactId > commons - io < / artifactId > < version > 2.10.0 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - lang3 < / artifactId > < version > 3.10 < / version > < / dependency > < / dependencies > < / project > |
요소 | 설명 |
---|---|
포장 | 이 프로젝트가 생성하는 아티팩트의 유형입니다(예: jar war ear pom). 플러그인은 자체 패키징을 생성할 수 있으므로 자체 패키징 유형을 생성할 수 있으므로 이 목록에는 가능한 모든 유형이 포함되어 있지 않습니다. |
이름 | 프로젝트의 전체 이름입니다. |
URL | 프로젝트 홈페이지의 URL입니다. |
의존성 | 이 요소는 프로젝트와 관련된 모든 종속성을 설명합니다. 이러한 종속성은 빌드 프로세스 중에 프로젝트의 클래스 경로를 구성하는 데 사용됩니다. 이 프로젝트에 정의된 저장소에서 자동으로 다운로드됩니다. |
의존 | 종속성을 생성한 프로젝트 그룹(예: org.apache.maven). |
짓다 | 프로젝트를 빌드하는 데 필요한 정보입니다. |
소스디렉토리 | 이 요소는 프로젝트 소스가 포함된 디렉토리를 지정합니다. 생성된 빌드 시스템은 프로젝트가 빌드될 때 이 디렉토리의 소스를 컴파일합니다. 주어진 경로는 프로젝트 설명자를 기준으로 합니다. |
최종 이름 | 생성된 아티팩트가 호출될 파일 이름(확장자 제외, 경로 정보 없음)입니다. 기본값은 ${artifactId}-${버전}입니다. |
플러그인 | 사용할 플러그인 목록입니다. |
플러그인 | 저장소에 있는 플러그인의 그룹 ID입니다. |
범위 | 종속성 범위 – 컴파일, 런타임, 테스트, 시스템 및 제공. 컴파일, 테스트 등에 사용되는 다양한 클래스 경로를 계산하는 데 사용됩니다. 또한 이 프로젝트의 배포에 포함할 아티팩트를 결정하는 데 도움이 됩니다. |
우리는 Crunchify에 700개 이상의 Java 자습서를 게시했으며 Spring MVC 종속성을 포함하기 시작한 이후로 pom.xml 파일을 사용하고 있습니다.
지난 몇 년 동안 점점 더 많은 라이브러리 종속성을 추가했기 때문에 Crunchify의 Java 자습서 pom.xml 파일이 이제 더 커졌습니다.
다음은 참조용 현재 pom.xml 파일입니다. 복사하여 프로젝트에 추가하면 그것도 효과적입니다.
Crunchify의 Java 토토리얼에 사용 중인 pom.xml 파일
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 |
< 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 . crunchify . tutorials < / groupId > < artifactId > crunchify - tutorials < / artifactId > < version > 1.0.1 - SNAPSHOT < / version > < packaging > jar < / packaging > < name > Crunchify 's Java Tutorials</name> <url>https://crunchify.com</url> <build> <sourceDirectory>src</sourceDirectory> <finalName>crunchify-tutorial</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>15</source> <target>15</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.3</version> <configuration> <descriptors> <descriptor>src/assembly/crunchify.xml</descriptor> </descriptors> </configuration> </plugin> </plugins> <pluginManagement> <plugins> <!--This plugin' s configuration is used to store Eclipse m2e settings only . It has no influence on the Maven build itself . -- > < plugin > < groupId > org . eclipse . m2e < / groupId > < artifactId > lifecycle - mapping < / artifactId > < version > 1.0.0 < / version > < configuration > < lifecycleMappingMetadata > < pluginExecutions > < pluginExecution > < pluginExecutionFilter > < groupId > org . apache . maven . plugins < / groupId > < artifactId > maven - compiler - plugin < / artifactId > < versionRange > [ 3.1 , ) < / versionRange > < goals > < goal > compile < / goal > < / goals > < / pluginExecutionFilter > < action > < ignore / > < / action > < / pluginExecution > < pluginExecution > < pluginExecutionFilter > < groupId / > < artifactId / > < versionRange > [ 3.1 , ) < / versionRange > < goals > < goal / > < / goals > < / pluginExecutionFilter > < action > < ignore / > < / action > < / pluginExecution > < / pluginExecutions > < / lifecycleMappingMetadata > < / configuration > < / plugin > < / plugins > < / pluginManagement > < / build > < dependencies > < dependency > < groupId > org . glassfish < / groupId > < artifactId > javax . json < / artifactId > < version > 1.1.4 < / version > < / dependency > < dependency > < groupId > com . github . wnameless . json < / groupId > < artifactId > json - flattener < / artifactId > < version > 0.12.0 < / version > < / dependency > < dependency > < groupId > commons - io < / groupId > < artifactId > commons - io < / artifactId > < version > 2.10.0 < / version > < / dependency > < dependency > < groupId > com . google . code . gson < / groupId > < artifactId > gson < / artifactId > < version > 2.8.7 < / version > < / dependency > < dependency > < groupId > net . jodah < / groupId > < artifactId > expiringmap < / artifactId > < version > 0.5.9 < / version > < / dependency > < dependency > < groupId > org . apache . httpcomponents < / groupId > < artifactId > httpclient < / artifactId > < version > 4.5.13 < / version > < / dependency > < dependency > < groupId > org . json < / groupId > < artifactId > json < / artifactId > < version > 20210307 < / version > < / dependency > < dependency > < groupId > net . spy < / groupId > < artifactId > spymemcached < / artifactId > < version > 2.12.3 < / version > < / dependency > < dependency > < groupId > com . whalin < / groupId > < artifactId > Memcached - Java - Client < / artifactId > < version > 3.0.2 < / version > < / dependency > < dependency > < groupId > com . googlecode . xmemcached < / groupId > < artifactId > xmemcached < / artifactId > < version > 2.4.7 < / version > < / dependency > < dependency > < groupId > com . paypal . sdk < / groupId > < artifactId > rest - api - sdk < / artifactId > < version > LATEST < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - dbcp2 < / artifactId > < version > 2.8.0 < / version > < / dependency > < dependency > < groupId > commons - dbcp < / groupId > < artifactId > commons - dbcp < / artifactId > < version > 20030825.184428 < / version > < / dependency > < dependency > < groupId > javax . ws . rs < / groupId > < artifactId > javax . ws . rs - api < / artifactId > < version > 2.1.1 < / version > < / dependency > < dependency > < groupId > org . hamcrest < / groupId > < artifactId > hamcrest - all < / artifactId > < version > 1.3 < / version > < / dependency > < dependency > < groupId > org . apache . logging . log4j < / groupId > < artifactId > log4j - core < / artifactId > < version > 2.16.0 < / version > < / dependency > < dependency > < groupId > com . google . guava < / groupId > < artifactId > guava < / artifactId > < version > 30.1.1 - jre < / version > < / dependency > < dependency > < groupId > com . googlecode . json - simple < / groupId > < artifactId > json - simple < / artifactId > < version > 1.1.1 < / version > < / dependency > < dependency > < groupId > commons - net < / groupId > < artifactId > commons - net < / artifactId > < version > 3.8.0 < / version > < / dependency > < dependency > < groupId > org . ow2 . asm < / groupId > < artifactId > asm < / artifactId > < version > 9.1 < / version > < / dependency > < dependency > < groupId > axis < / groupId > < artifactId > axis < / artifactId > < version > 1.4 < / version > < / dependency > < dependency > < groupId > commons - beanutils < / groupId > < artifactId > commons - beanutils < / artifactId > < version > 1.9.4 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - collections4 < / artifactId > < version > 4.4 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - configuration2 < / artifactId > < version > 2.7 < / version > < / dependency > < dependency > < groupId > commons - discovery < / groupId > < artifactId > commons - discovery < / artifactId > < version > 0.5 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - lang3 < / artifactId > < version > 3.12.0 < / version > < / dependency > < dependency > < groupId > commons - logging < / groupId > < artifactId > commons - logging < / artifactId > < version > 1.2 < / version > < / dependency > < dependency > < groupId > commons - logging < / groupId > < artifactId > commons - logging - api < / artifactId > < version > 1.1 < / version > < / dependency > < dependency > < groupId > javax . mail < / groupId > < artifactId > javax . mail - api < / artifactId > < version > 1.6.2 < / version > < / dependency > < dependency > < groupId > javax . mail < / groupId > < artifactId > mail < / artifactId > < version > 1.4.7 < / version > < / dependency > < dependency > < groupId > javax . xml < / groupId > < artifactId > jaxrpc - api < / artifactId > < version > 1.1 < / version > < / dependency > < dependency > < groupId > javax . servlet < / groupId > < artifactId > javax . servlet - api < / artifactId > < version > 4.0.1 < / version > < scope > provided < / scope > < / dependency > < dependency > < groupId > org . apache . axis < / groupId > < artifactId > axis - saaj < / artifactId > < version > 1.4 < / version > < / dependency > < dependency > < groupId > wsdl4j < / groupId > < artifactId > wsdl4j < / artifactId > < version > 1.6.3 < / version > < / dependency > < dependency > < groupId > com . google . zxing < / groupId > < artifactId > core < / artifactId > < version > 3.4.1 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - compress < / artifactId > < version > 1.20 < / version > < / dependency > < dependency > < groupId > mysql < / groupId > < artifactId > mysql - connector - java < / artifactId > < version > 8.0.25 < / version > < / dependency > < dependency > < groupId > org . junit . jupiter < / groupId > < artifactId > junit - jupiter - api < / artifactId > < version > 5.8.0 - M1 < / version > < scope > test < / scope > < / dependency > < dependency > < groupId > ch . qos . logback < / groupId > < artifactId > logback - classic < / artifactId > < version > 1.3.0 - alpha5 < / version > < / dependency > < dependency > < groupId > commons - validator < / groupId > < artifactId > commons - validator < / artifactId > < version > 1.7 < / version > < / dependency > < dependency > < groupId > org . springframework < / groupId > < artifactId > spring - context < / artifactId > < version > 5.3.8 < / version > < / dependency > < dependency > < groupId > org . springframework < / groupId > < artifactId > spring - context - support < / artifactId > < version > 5.3.8 < / version > < / dependency > < dependency > < groupId > org . slf4j < / groupId > < artifactId > slf4j - api < / artifactId > < version > 1.7.31 < / version > < / dependency > < dependency > < groupId > org . slf4j < / groupId > < artifactId > jul - to - slf4j < / artifactId > < version > 1.7.31 < / version > < / dependency > < dependency > < groupId > org . slf4j < / groupId > < artifactId > jcl - over - slf4j < / artifactId > < version > 1.7.31 < / version > < / dependency > < dependency > < groupId > org . slf4j < / groupId > < artifactId > log4j - over - slf4j < / artifactId > < version > 1.7.31 < / version > < / dependency > < / dependencies > < / project > |
이것이 pom.xml 파일이 무엇이며 Java의 J2EE 프로젝트에서 이 파일을 사용하는 이유를 명확히 하기를 바랍니다.

더 궁금한 점이 있으면 알려주세요.
Log4j를 최신 버전으로 업데이트
CVE-2021-44228: Apache Log4j2 <=2.14.1 구성, 로그 메시지 및 매개변수에 사용된 JNDI 기능은 공격자가 제어하는 LDAP 및 기타 JNDI 관련 엔드포인트로부터 보호하지 않습니다.
log4j 2.16.0부터 이 동작은 기본적으로 비활성화되어 있습니다.