POM ( Project Object Model )
pom은 프로젝트의 구조와 내용을 설명하고 있으며pom.xml 파일에 프로젝트 관리, 빋르데 필요한 환견 설정, 의존성 관리 등의 정보들을 기술합니다.
간단히말하면 pom.xml은 메이븐(Maver)의 빌드 정보를 담고 있는 파일입니다.
참고로 의존성은 https://mvnrepository.com/ 에 검색해서 가져오면됨.
원하는 버전 선택 해주면 됩니다.
그러면 의존성 정보가 나오는데 이걸 pom.xml에 복사 붙여넣기 해주시면 됩니다.
그러면 Maven은 무엇일까여?(https://maven.apache.org/what-is-maven.html)
자바용 프로젝트 관리 도구입니다.
(1.라이브러리 관리, 2.빌드 기능, 3. 높은 범용성(pom.xml은 다른 프로젝트에 복/붙 가능))
- 빌드 프로세스를 쉽게 만들기
- 균일한 빌드 시스템 제공
- 양질의 프로젝트 정보 제공
- 더 나은 개발 관행 장려
빌드는 프로젝트를 위해 작성한 Java코드나 여러 자원들(.xml, .jar, .properties)를 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과 물입니다. 또 단순히 커파일해주는 작업 말고도 테스팅, 검사, 배포까지 일련의 작업들을 빌드라고 부릅니다.
pom.xml의 기본형태
pom.xml은 파일 형식이 XML이므로 태그 형태로 구성되어 있습니다.
<project>태그 : 루트 태그이며 메이븐의 XML 네임스페이스를 지정해줍니다.
<modelVersion> : 메이븐의 모델 버전
<groupID> : 그룹 ID의 태그
<artifactID>: 아티팩트ID의 태그
<version> : 버전명 태그
<packageing> : 패키징 형식을 지정하는 태그 ex) war
<name> : 프로젝트 이름
<url> : 메이븐의 url
<properties> : 프로젝트 관련 속성
<parent> : pom.xml의 상속에 관련된 태그
<dependency> : 프로젝트가 의존하는 라이브러리들의 정보
<exclusions> : 특정 의존 라이브러리 제외
<exclusions>를 예로 설명해보면 Spring-context-4.1.0.jar이 commons-logging-1.0.0.jar를 의존한다고 했을때 spring-context-4.1.0을 dependency 설정으로 동록했을때 자동으로 commons-logging-1.0.0.jar를 내려받아 빌드환경에 추가됩니다.
여기서 2가지 문제가 있는데 첫번째는 spring-context-4.1.0.jar을 사용하지만 commons-logging는 2.0.0을 사용하고 싶은 경우입니다. sprign-context를 사용하지만 로깅 프레임웍을 commons-logging(log4j)가 아닌 logback(slf4j)을 사용하고 싶은 경우 입니다.
이경우 명시적으로 <exclusions>를 통해 commonst-logging-1.0.0이 추가되지 않도록 할수 있습니다.
그렇지만 이대로 테스트를 하거나 빌드를 하면 실패할것입니다. 의존하는 logging라이브러리가 없기 떄문인데
exclusions를 사용한 경우에는 그 빈자리를 dependency를 추가로 정의해주어야 합니다.
<dependency>는 프로젝트에 사용하는 라이브러리를 정의하는 태그입니다.
라이브러리는 groupId와 artifactId로 구별되므로, 이 두 가지 태그는<dependency>에 꼭 입력해주어야 합니다.
<groupId> : 라이브러리의 그룹 ID
<artifactld> : 라이브러리의 아티팩트 ID
<version> : 라이브러리를 사용할 버전
<scope> : 라이브러리가 프로젝트 내에서 사용하는 범위
예시 )
<?xml version="1.0" encoding="UTF-8"?> // XML 문서입을 명시
<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/maven-v4_0_0.xsd">
// XML 문서에 단 한개만 존재하는 root 요소 생성
<modelVersion>4.0.0</modelVersion> // 메이븐의 모델 버전
<groupId>com.springbook</groupId> // 그룹의 id 태그
<artifactId>biz</artifactId> // 아티팩트 id 태그
<name>BoardWeb</name> // 프로젝트 이름
<packaging>war</packaging> // 패키징 형식 지정하는 태그
<version>1.0.0-BUILD-SNAPSHOT</version> // 버전명 태그
<properties> // 프로 젝트 관련 속성입니다.
<java-version>1.8</java-version>
// 자바 버전
<org.springframework-version>4.2.4.RELEASE</org.springframework-version>
// 스피링프레임워크 버전 정보
<org.aspectj-version>1.6.10</org.aspectj-version>
// 확장성 참고 : https://www.eclipse.org/aspectj/
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- H2 데이터베이스 -->
<dependency> // 의존성
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId> // 데이터베이스 이름
<version>1.4.196</version> // 데이터베이스 버전
</dependency>
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
의존성 추가를 하면 Maven이 자동으로 jar파일을 생성시켜줍니다.
(의존성을 변경하는 경우에는 주석처리를 해두고 새로운 코드를 추가시키는 방법도 좋다.)
'XML' 카테고리의 다른 글
XML 네임스페이스~문서의 종류 (0) | 2022.07.29 |
---|---|
XML 요소~속성 (0) | 2022.07.29 |
XML 문법~주석 (0) | 2022.07.28 |
XML 개요~구조 (0) | 2022.07.28 |