TIL

Maven pom.xml 설정 뜯어보기

빈코 2022. 4. 22. 10:58

개발자들이 편하게 서로 협력하면서 일을 할 수 있도록 개발된 프로그램 중 Maven이 있습니다. Maven은 프로젝트를 빌드해주고 라이브러리를 관리해주는 기능들이 있으며, 더 나아가 필요한 라이브러리의 하위 라이브러리까지 버전에 맞게 받아주는 장점이 있습니다. 

 

Maven
Maven

 

Maven

Maven은 앞서 정의한 내용처럼 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는 데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동 다운을 해줍니다.

 

빌드 순서는 complie->test->package 순으로 진행됩니다. complie은 src/main/java 디렉토리 아래의 모든 소스 코드를 컴파일하는 과정이고, test는 src/test/java, src/test/resources 테스트 자원 복사 및 테스트 소스 코드를 컴파일하는 과정입니다. 마지막으로 packaging 단계는 컴파일과 테스트가 완료된 후에 jar, war 같은 형태로 압축하는 작업입니다.

 

 

설정 파일(pom.xml / settings.xml)

[settings.xml]

메이븐 필드 툴과 관련한 설정 파일이며, MAVEN_HOME/conf 디렉토리에 위치해 있습니다. 물론 Maven 설치 시 기본으로 제공합니다.

 

[pom.xml]

1. Properties (선택 사항) 

<properties>
        <war.filename>${project.artifactId}</war.filename>
        <spring.version>4.3.15.RELEASE</spring.version>
        <spring.security.version>4.2.5.RELEASE</spring.security.version>
    </properties>

pom.xml 파일에서 Maven 프로퍼티를 사용하여 동적인 환경 구성이 가능합니다. 프로퍼티의 종류에는 project, settings, 환경 변수, Java System, 사용자 정의가 있습니다. 좀 더 쉽게 풀어 설명하자면, maven 내부에서 반복적으로 사용될 상수 값을 정의할 때 사용합니다.

 

 

2. Profiles (선택 사항)

 <profile>
            <id>local</id>
            <properties>
                <environment>local</environment>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

여러 개의 profile을 가질 수 있으며, 각각 다른 설정파일과 개발 환경을 구축할 때 사용합니다. 주로 로컬, 개발서버, 운영서버를 나누어 배포하여야 하는 설정 등이 존재할 때 이를 각각 profile로 등록해서 배포할 때마다 profile 값만 변경해줍니다. war로 빌드할 때 profile에 기술한 id를 함께 작성하면, 설정한 방식으로 빌드하여 배포가 가능합니다.

 

 

3. DistributionManagement (선택 사항)

<distributionManagement>
        <repository>
            <id>local-hack-repo</id>
            <name>LocalDir</name>
            <url>file://${project.basedir}/dist-maven</url>
        </repository>
    </distributionManagement>

repository를 별도로 설정하며 목적에 따라 release, snapshots, 3rd party 등 나눠서 등록이 가능합니다.

 

 

4. Dependencies (필수 사항)

<dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
            <exclusions>
                <!-- Exclude Commons Logging in favor of SLF4j -->
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
</dependencies>

의존성 라이브러리 정보를 포함함으로써 라이브러리를 불러오는 부분입니다. dependencies 섹션 아래 세부 dependency가 기술되며, Maven을 통해 불러온 라이브러리들은 Java Build Path에서 Maven Dependencies 하위 목록으로 들어가며 별도 설정이 불가능합니다. (pom.xml을 통해서만 추가, 삭제, 버전 변경이 가능합니다)

 

최소 groupId, artifactId, version 정보가 필요합니다

  • groupId, artifactId : 의존성 라이브러리에 추가하기 위한 필수값
  • version : 동일한 artifact를 가진 라이브러리가 여러 개 존재하는데 그중 어떤 버전을 가져올 것인지 설정
  • type : 해당 프로젝트로 불러들일 의존성 라이브러리의 유형으로 기본값은 jar
  • scope : 해당 라이브러리가 적용될 범위를 지정할 수 있으며 사용 가능한 범위는 총 5개
  • complie(default) : 기본값일 경우 모든 클래스 경로에서 사용 가능하며 컴파일 및 배포 시 같이 제공됩니다.
  • provided : compile과 유사하나, JDK 혹은 컨테이너가 런타임 시에만 해당 라이브러리를 제공하며 배포 시에는 빠집니다.
  • runtime : 컴파일 시에는 적용되지 않고, 실행될 때만 사용합니다. 런타임과 테스트 경로에는 존재하지만, 컴파일 클래스 경로에는 존재하지 않습니다
  • test : 테스트 시에만 해당 라이브러리를 사용한다는 의미입니다.
  • system : provided와 유사하나, 저장소에서 관리되지 않고 직접 관리하는 JAR를 추가합니다.         
  • optional : 다른 프로젝트에 의존성을 가진 경우에 사용할지 여부를 선택합니다. 의존성 정보를 다른 프로젝트에 전달하고 싶지 않을 때 optional을 true로 설정하면 됩니다.

 

5. Build (필수 사항)

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <compilerArgument>-Xlint:all</compilerArgument>
          <showWarnings>true</showWarnings>
          <showDeprecation>true</showDeprecation>
        </configuration>
      </plugin>
  </build>

디렉터리 구조로 project 태그 하위에 구성됩니다. plugins는 빌드에서 사용할 플러그인을 기재하고, resources는 resource의 정보를 기재합니다.

 


👨‍👩‍👦‍👦 오픈채팅방 운영

취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁

 

참여코드 : 456456

https://open.kakao.com/o/gVHZP8dg

 

비전공 개발자 취업 준비방(질문&답변)

#비전공 #개발자 #취업 #멘토링 #부트캠프 #국비지원 #백엔드 #프론트엔드 #중소기업 #중견기업 #자바 #Java #sql

open.kakao.com

 


👨‍💻 전자책 출간

아울러 제가  🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁

https://kmong.com/gig/480954

 

비전공개발자 2년만에 중견기업 들어간 방법 | 14000원부터 시작 가능한 총 평점 0점의 전자책, 취

0개 총 작업 개수 완료한 총 평점 0점인 Binco의 전자책, 취업·이직 전자책 서비스를 0개의 리뷰와 함께 확인해 보세요. 전자책, 취업·이직 전자책 제공 등 14000원부터 시작 가능한 서비스

kmong.com


 

 


[ 맺으며 ]

Maven을 들어봤지만 정확히 무엇을 해주는 것이며 어떤 원리로 작동하는 것인지 알아보았습니다. 항상 pom.xml은 기존 프로젝트에서 가져다만 사용하고 정확한 의미를 몰랐는데, 이번 기회에 공부하면서 설정법들을 많이 알게 된 것 같네요. 

 

 

관련 포스팅

* [ Maven vs Gradle ]

반응형