오늘은 Apache Maven에 대해 알아보자.
- 자바용 프로젝트 관리 도구로써 project object model(POM) XML 문서를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합하여 관리하는 도구로써 Apache License 2.0 으로 배포되는 오픈 소스 소프트웨어이다.
일반적인 프로젝트는 개발자가 필요한 라이브러리를 직접 찾아서 추가해야 하지만, Maven을 사용하면 pom.xml 문서에 사용하고자 하는 라이브러리를 등록하여 자동으로 프로젝트에 추가되게 하여 라이브러리 관리의 편의성을 제공한다.
Maven을 사용하면 이전과는 다르게 /WEB_INF 폴더 하위에 라이브러리 폴더를 만들어 직접 하나하나 추가하지 않아도 된다.
- POM(Project Object Model)은 하나의 프로젝트에서 사용하는 자바 버전, 라이브러리, 플러그인 구성을 통합하여 관리할 수 있게 각 설정 정보를 XML로 문서화 한 것을 말한다.
<project>
<modelVersion>4.0.0</modelVersion> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
<groupId>com.kh</groupId> <!-- 최초 만든 패키지 1, 2레벨 -->
<artifactId>spring</artifactId> <!-- 최초 만든 패키지 3레벨 = context-path -->
<name>springProject</name> <!-- 프로젝트 명 -->
<version>1.0</version>
<!-- properties : 메이븐이 적용된 프로젝트에서 공통적으로 사용할 버전 또는 설정값 정보를 작성하는 태그 -->
<properties>
<java-version>11</java-version>
<org.springframework-version>5.3.14</org.springframework-version>
<org.aspectj-version>1.9.4</org.aspectj-version>
<org.slf4j-version>1.7.25</org.slf4j-version>
</properties>
<dependencies> <!-- 라이브러리 의존성 주입 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope> <!-- 이 라이브러리는 테스트 실행 및 컴파일에만 사용 -->
</dependency>
</dependencies>
<!-- build : 프로젝트 빌드 시 사용되는 플러그인 추가 및 버전 정보 설정 -->
<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>
<!-- 컴파일러 플러그인은 프로젝트의 소스(자바코드)를 컴파일하는 데 사용 jdk 1.6 이상 사용 시 3.0 이상 버전을
사용, source, taget에는 사용하는 jdk 버전을 작성 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<!-- jdk 버전과 맞춤 -->
<source>11</source>
<target>11</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>
<!-- Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer -->
<!-- 메이븐 구성 문제로 인한 pom.xml 오류 발생 시 해결 -->
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
</project>
<build>
<plugins>
<plugin>
~
<plugin>
<plugin>
~
<plugin>
.
.
.
<plugins>
<build>
- plugin 을 기술하지 않아도 로드가 되는 이유는 pluginRepositories 태그 안에 배치된 pluginRepository 안에 있는 plugin들을 받아오기 때문이다.
- 추가적으로 plugin에 대한 설정이 필요한 경우에만 plugin을 작성하면 된다.