Maven은 자바용 프로젝트 관리 도구로 Build tool(빌드 도구)라고도 한다. pom.xml 문서를 통해 해당 프로젝트의 버전 정보 및 라이브러리 정보들을 통합해서 관리하는 프레임워크이다. 일반적으로 개발자가 필요한 라이브러리를 하나씩 직접 찾아 라이브러리에 추가해야 했던 것과 다르게 Maven을 사용하면 pom.xml 문서에 사용할 라이브러리를 태그로 등록하여 자동으로 프로젝트에 추가되게끔 하여 라이브러리 사용에 훨씬 편리하다.
💡 Build?
빌드는 작성한 Java 코드나 프로젝트에 사용할 파일등(.xml, .jpg, .jar, .properties)을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정, 결과물이다.
Build Tool(빌드 도구)로는 Maven과 Grandle을 많이 사용한다. 이런 빌드 도구들은 빌드 외에도 배포 패키징 처리나 테스트를 하는 기능도 포함하고 있다.
POM은 Project Object Model를 뜻한다. 하나의 프로젝트에서 사용할 자바 버전, 라이브러리, 플로그인 구성을 통합하여 관리할 수 있도록 각 설정 정보를 xml 문서로 만든 것이다.
pom.xml
구성은 우선 <project>
태그로 시작해서 내부에 제공되는 태그들을 이용해 각 설정 정보를 작성한다.
<modelVersion>
Maven에 대한 모델 정보 버전을 작성하는 태그로 2버전 이후는 항상 4.0.0으로 작성한다.
<groupId>
,<artifactId>
프로젝트 구분자에 대한 정보를 작성하는 태그들로 <groubId>
에는 최초에 만든 패키지의 1,2 레벨을 작성하고 <artifactId>
에는 패키지의 3레벨인 context-path를 작성한다.
보통 패키지명은 com.회사명.프로젝트명 등으로 시작하는 경우가 많으므로 예를 들어 com.lee.spring이라는 패키지를 생성해서 프로젝트를 만들고 있다면 com.lee가 <groupId>
에, <artifactId>
에는 spring이 들어가게 된다.
<properties>
변수처럼 사용할 내용을 작성한다. 태그 이름으로 사용하는 것이 변수명이 되고 태그 내부에 작성한 것이 값이 된다.
<name>
: 프로젝트 명을 작성한다.
<version>
: 프로젝트의 버전을 작성한다.
<packaging>
: 프로젝트 파일을 패키징할 파일 타입을 작성한다.
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lee</groupId>
<artifactId>spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>spring</name>
<properties>
<java-version>17</java-version>
<!-- ${java-version}을 쓰면 17을 불러온다.-->
<org.springframework-version>5.3.28</org.springframework-version>
<org.aspectj-version>1.9.19</org.aspectj-version>
<org.slf4j-version>2.0.7</org.slf4j-version>
<org.springsequrity-version>5.8.4</org.springsequrity-version>
</properties>
</project>
<dependency>
<dependencies>
태그의 하위 태그로 작성할 수 있다. <dependency>
태그 사용을 라이브러리 의존성을 주입이라고 한다.
단순하게 내가 사용하는 프로젝트에서 lombok이나 log4j 같은 외부 라이브러리를 받아와서 사용하고 있다면 그 관계는 프로젝트 입장에서 봤을 때 의존 관계를 갖게 된다. 프로젝트가 사용할 라이브러리에 기대서 만들어지고 있기 때문이다. 이렇게 의존 관계를 갖게 되는 라이브러리들을 <dependencies>
태그에 모아서 등록하고 이를 의존성 주입했다 라고 표현한다.
💡 Spring에서는 의존성 주입을 위해 @Autowired
같은 어노테이션을 사용한다.
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<scope>provided</scope>
</dependency>
<build>
빌드가 동작할 때 필요한 Java에 대한 설정을 작성한다. 빌드에 사용할 플러그인 목록이라고도 한다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
Maven 설치 방법 tistory : https://sailer.tistory.com/entry/Windows-10에-메이븐maven-설치-Aapache-Maven