기타
[빌드] 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에 대해서 공부해보겠습니다.
반응형