본문 바로가기
개인공부/Maven

5. Maven Archetype Plugin, Maven 프로젝트 생성

by yoondoo 2024. 10. 13.
728x90

코드 에디터에서 직접 선택해서 생성하는 방법이 있지만 이번 포스팅에선 커맨드라인을 입력해서 생성한다.

 

우선 생성하기 전에 Maven Archetype Plugin이 무엇인지 간략하게 설명하고 넘어가겠다.

 

1. Maven Archetype Plugin

우선 헷갈릴 수 있는데 Maven Archetype Plugin에 있는 Plugin과 pom.xml에 있는 <plugin>은 목적 자체가 다르므로 별개라고 생각해야겠다.

 

Maven Archetype Plugin의 목적은 새로운 프로젝트를 Archetype(아키타입)을 이용해 생성 할 때 사용하는 플러그인이고

<plugin>은 주로 빌드, 패키징, 테스트를 자동화하는데 사용되는 도구이므로 목적 서로 다르다.

 

사용자(개발자)가 미리 정의된 템플릿을 사용하여 Maven 프로젝트를 쉽고 빠르게 생성할 수 있도록 돕는 도구

 

1-1. 사용하면?

  • 일관된 프로젝트 구조를 보장하고 쉽게 생성할 수 있다.
  • 미리 정의된 템플릿을 사용하기 때문에 프로젝트를 빠르게 생성할 수 있다.
  • 자신만의 아키타입을 정의하고 이를 재사용할 수 있다.
  • 특정 아키타입을 기반으로 프로젝트 생성할 수 있다.
  • 기존 프로젝트를 아키타입으로 변환할 수 있다.
  • 아키타입의 유효성을 검증할 수 있다. ex) archetype:validate


2. mvn CommandLine

mvn -B archetype:generate -DgroupId=com.nhnacademy.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4

 

 

쉽게 풀어쓰면 아래와 같다.

  • archetype:generate
    • 새로운 Maven프로젝트를 만들꺼야!
  • -DarchetypeArtifactId=maven-archetype-quickstart
    • 만들 때 사용할 탬플릿은 `maven-archetype-quickstart`참고해!
  • -DarchetypeVersion=1.4
    • 사용할 `maven-archetype-quickstart`템플릿의 버전은 1.4야!
  • -DgroupId=com.nhnacademy.app
    • 추가적인 프로젝트 구조는 `com.nhnacademy.app` 이렇게 생성해주고
  • -DartifactId=my-app 
    • 프로젝트의 이름은 `my-app`이야!

 

리눅스 명령어들을 좀 더 자세히 보고 싶으면 더보기 란을 참고 바란다.

더보기
  • -B (Batch Mode)
    • 비대화형 모드를 의미, Interactive한 입력이나 진행 상황 표시 없이 미리 제공된 롭션들만 사용해 명령어를 실행
    • ex) 터미널에서 볼 수 있는 -> update? [y/n] 입력하세요 : 
    • 이는 CI/CD 환경이나 자동화 스크립트에서 유용하게 사용된다. 왜냐면 대화형 입력 없이 실행되기 때문이다.

 

  • archetype:generate
    • 새로운 프로젝트를 생성하는 `목표(Goal)`이다.
    • 개발자가 템플릿(archetype)을 기반으로  기본 프로젝트 구조를 빠르게 생성할 수 있다.
    • generate 이외에 create, create-from-project, crawl 등이 있고 게시글 가장 아래 더보기를 참고 하면 된다.

 

  • -DgroupId=com.nhnacademy.app
    • groupId는 프로젝트의 그룹 식별자(ID)로 일반적으로 패키지명을 따름
    • 보통 역방향 도메인 이름 구조를 사용, ex) com.nhnacademy.app -> nhnacademy.com이라는 도메인을 의미
    • Maven을 사용할 때 패키지 구조도 이 값에 기반하여 생성된다.
    • 생서된 디렉터리 구조는 `src/main/java/com/nhnacademy/app`으로 나타난다.
  • -DartifactId=my-app 
    • artifactid는 프로젝트의 이름(ID)으로 프로젝트를 식별할 수 있는 ID이다. (artifact : 인공물, 인공 산물)
    • 생성되는 프로젝트 디렉터리 이름도 이 artifactId 값으로 된다.
    • 보통 애플리케이션 이름이며, 같은 groupId 내에서 고유한 이름이여야 한다.

 

  • -DarchetypeArtifactId=maven-archetype-quickstart
    • `maven-archetype-quickstart`이라는 archetype을 사용해서 프로젝트를 생성
    • `maven-archetype-quickstart`는 Maven이 제공하는 가장 기본적인 프로젝트 템플릿, 아래와 같은 구조를 자동으로 생성
      • src/main/java : 애플리케이션 소스코드
      • src/test/java : 테스트 코드
      • 기본 pom.xml 파일 (프로젝트의 빌드 설정 파일)
    • 다른 archetype들도 있다. 각각의 타입마다 생성되는 디렉터리 구조가 다르다.
    • 사이트 참조(https://maven.apache.org/archetypes/) 꼭 들어가서 보길 바란다. 프로젝트 구조나 사용하는 컴파일러 버전 같은 것도 나와있다.

 

  • -DarchetypeVersion=1.4
    • 사용하고자 하는 아키타입의 버전을 지정
    • Maven에서는 여러 버전이 존재할 수 있고, 새로운 기능이나 변경사랑이 반영될 때 버전이 올라간다.

위의 명령어를 입력해서 생성되는 파일 구조는 아래 사진과 같다

 


3.  random 프로젝트 생성 실습

3-1. CLI 입력

(mac에서 진행했음)

mvn -B archetype:generate -DgroupId=com.nhnacademy.app -DartifactId=random -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4

 

생성된 프로젝트 열기

 

 


4. 결론

맨 처음 프로그래밍 학습 할 때 프로젝트를 만드는 것부터 어려웠는데, 언젠가부터 잘하는 사람들을 따라하면서 딸깍딸깍 선택만 해줘도 

뭐가 좌라라락 만들어진 채로 생성이되서 이거는 인텔리제이나 이클립스 같은 편집기가 해주는건가?? 했는데 전혀 아니였다...

 

이전 포스팅부터 현재까지 많이 찾아보고 실습해보니 Maven이 생성부터 시작해서 컴파일, 테스트, 패키징 등등 까지 왜 자동화 시켜주는 빌드 도구라고 하는지 알 수 있는 경험이였다!!!

 

다음 포스팅에서는 같은 하나의 로직을 이미있는 라이브러리로 만들어보고, 외부 라이브러리를 maven 저장소에서 의존성을 추가해서 만들어 보는 것들을 실습해 볼 예정이다!

 

 


 

generate를 포함한 주요 archetype들 설명

더보기

주요 Archetype 목표들:

  1. archetype:generate:
    • 새로운 Maven 프로젝트를 생성하는 데 사용됩니다.
    • 개발자가 템플릿(Archetype)을 기반으로 기본 프로젝트 구조를 빠르게 생성할 수 있게 합니다.
  2. archetype:create:
    • 새로운 Archetype을 생성하는 목표입니다. 기본 구조를 사용하여 새로운 아키타입 프로젝트를 만듭니다.
    • 이 기능을 통해 개발자는 자신만의 맞춤형 아키타입을 정의하고 이를 공유하거나 사용할 수 있습니다.
  3. archetype:create-from-project:
    • 기존 Maven 프로젝트에서 새로운 아키타입을 생성합니다. 기존 프로젝트를 템플릿으로 변환하여 다른 프로젝트에서 재사용할 수 있는 구조를 만듭니다.
    • 즉, 자신이 만든 프로젝트를 기반으로 다른 개발자들이 사용할 수 있는 아키타입을 만들 때 사용됩니다.
  4. archetype:crawl:
    • 특정 디렉터리에서 Archetype을 검색하고, 이를 자동으로 Maven 저장소에 배포하거나 관리하는 데 도움을 줍니다.
  5. archetype:integration-test:
    • 생성된 아키타입이 정상적으로 작동하는지 테스트하는 목표입니다. 이를 통해 아키타입을 생성하고 올바르게 작동하는지 검증할 수 있습니다.
  6. archetype:update-local-catalog:
    • 로컬 아키타입 카탈로그를 업데이트하는 목표입니다. 새로운 아키타입을 사용할 수 있도록 로컬 저장소에 정보를 갱신합니다.
  7. archetype:validate:
    • 아키타입의 구성이 올바른지 확인하는 목표입니다. 즉, 프로젝트가 아키타입으로 변환될 수 있는지, 구조가 제대로 갖추어져 있는지 검증합니다.

요약:

  • generate: 새로운 프로젝트 생성.
  • create: 새로운 아키타입 생성.
  • create-from-project: 기존 프로젝트를 아키타입으로 변환.
  • crawl: 아키타입 검색.
  • integration-test: 생성된 아키타입을 테스트.
  • update-local-catalog: 로컬 아키타입 카탈로그 갱신.
  • validate: 아키타입의 구성 유효성 검증.

 

반응형

'개인공부 > Maven' 카테고리의 다른 글

4. Maven  (3) 2024.10.13
3. 빌드 도구없이 jar파일 만들어보기 2탄  (0) 2024.10.13
2. 빌드 도구없이 jar파일 만들어보기 1탄  (4) 2024.10.12
1. 빌드 도구  (1) 2024.10.12

댓글