기타

[빌드] Maven 관련 용어 정리(archetype, GroupId, ArtifactId,...)

띵유 2022. 3. 11. 00:34
반응형

이번 포스팅은 Maven 과 관련된 용어와 지식을 정리하는 글입니다.
우선 Maven 은 빌드도구입니다.
프로젝트를 진행하다보면 여러 라이브러리를 참조해야할 때가 많은데요,
이때마다 라이브러리를 다운받는것은 매우 힘듭니다. 그래서 maven은 라이브러리를 네트워크(maven 저장소)에서 다운받아와 관리해줍니다. 

  • modelVersion
    maven의 버전

  • description
    프로젝트의 간략한 설명

  • properties
    pom.xml 파일내에서 여러번 사용되는 중복상수. ${태그명} 으로 사용

  • Archetype
    메이븐 프로젝트 toolkit입니다. 메이븐 프로젝트에서 사용하는 모델이나 패턴을 템플릿화 해서 빠르게 구현할 수 있도록 해줍니다. 그냥 템플릿이라고 보면됩니다.
    intellij 에서 maven 기반 프로젝트를 생성할 때에 add archetype 로 추가할 수 있습니다.
    이때 템플릿의 groupId, ArtfactId, Version 등을 명시해주어야합니다.
    아래 페이지를 확인하면 maven 저장소에 배포되어있는 여러가지 템플릿이 있으니 참고용으로 활용할 수 있습니다.
    https://mvnrepository.com/search?q=archetype
  • GroupId
    프로젝트 식별자입니다. GroupID는 프로젝트에서 패키지명이 됩니다.
    java의 패키지 이름규칙을 따라야 하며 도메인 이름의 반대순서대로 적어줘야합니다. 
    ex) org.apache.maven, org.apache.common, net.alchim31.maven
    subgroup 을 만들 수도 있습니다. 예를들어 다중모듈 프로젝트라면 부모 groupId에 추가 할 수 있습니다.
    ex) org.apache.maven , org.apache.maven.plugins, org.apache.maven.reporting

  • ArtifactId
    jar파일 이름입니다. 작게보면 프로젝트 기능이라고 볼 수도 있습니다. 개발 프로젝트에 할당되는 ID입니다.

  • version 
    배포 버전입니다. 

  • Maven Goal
    프로그램을 빌드하기 위한 각 단계별 역할 
    - compile : 프로그램을 컴파일합니다.
    - test-compile : 테스트 프로그램을 컴파일 합니다. (TEST폴더)
    - test : 테스트를 실행합니다. 
    - package : 패키지를 생성합니다. 즉, jar 파일을 만듭니다.
    - install : 패키징한 파일을 로컬 저장소에 배포합니다. (USER_HOME/.m2/)
    - site : 메이번 설정정보 파일을 활용하여 프로젝트에 대한 문서 사이트를 생성합니다.
    - deploy : 패키징한 파일을 원격저장소에 배포합니다. (nexus or maven central 저장소)
    - clean : 컴파일에서 생성된 각종 파일들을 모두 삭제합니다. 

  • POM.xml
    Project Object Model 의 약자입니다.
    프로젝트 관리, 빌드에 대한 환경설정, 의존성 관리등에 대한 정보를 담고있습니다. 
    최소한의 구성요소는 다음과 같습니다.
<project> 
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId> 
<artifactId>app</artifactId> 
<version>1</version> 
</project>

 

      스프링 프레임워크를 사용하고싶다면 다음과 같이 dependency를 추가해주면 됩니다.
      maven은 추가한 라이브러리와 연관된 다른 라이브러리들을 자동으로 포함시켜줍니다. 

<dependencies> 
<dependency> 
<groupId>org.springframework</groupId> 
<artifactId>spring-context</artifactId> 
<version>4.1.0.RELEASE</version> 
</dependency> 
</dependencies>

    이렇게 추가한 라이브러리는 C:\~~\.m2\repository 경로에서 볼 수 있습니다.
   

    즉, POM.xml에 dependency를 추가해놓으면 maven update시 라이브러리가 내 로컬로 다운받아지고,
    여러 프로젝트에서 라이브러리를 참조할 수 있습니다.

  • 다중모듈
    dependency를 사용해서 여러 프로젝트를 관리하다보면, 프로젝트마다 공통으로 필요한 모듈들이 있을 수 있습니다.
    maven은 공통으로 사용하는 모듈, 개별적으로 사용하는 모듈을 나누어서 관리하고 상속관계를 만들 수 있습니다.
    자세히 정리되어있는 글이 있어 남깁니다.
    https://windwolf.tistory.com/18

 

maven은 xml기반이여서 작성이 힘들고 멀티프로젝트관리가 조금 복잡합니다.
maven뒤에 나온 gradle은 이런 단점을 극복하고 있습니다.
다음 포스팅에서는 gradle에 대해서 공부해보겠습니다.

 

반응형