https://www.baeldung.com/maven-packaging-types 구글번역 + 자체교정

 

1. 개요

패키징 유형은 모든 Maven 프로젝트의 중요한 측면입니다. 프로젝트가 생성하는 아티팩트 유형을 지정합니다. 일반적으로 빌드는 jar, war, pom 또는 기타 실행 파일을 생성합니다.
Maven은 다양한 기본 패키징 유형을 제공하며 사용자 정의 패키징을 정의할 수 있는 유연성도 제공합니다.

이 튜토리얼에서는 Maven 패키징 유형에 대해 자세히 살펴보겠습니다. 먼저 Maven의 빌드 수명주기를 살펴보겠습니다. 그런 다음 각 패키징 유형, 해당 유형이 나타내는 내용, 프로젝트 수명 주기에 미치는 영향에 대해 논의하겠습니다. 마지막에는 맞춤 패키징 유형을 정의하는 방법을 살펴보겠습니다.

2. 기본 패키징 유형

Maven은 jar, war,ear, pom, rar, ejb 및 maven-plugin을 포함하는 다양한 기본 패키징 유형을 제공합니다. 각 패키징 유형은 여러 단계로 구성된 빌드 수명 주기를 따릅니다. 일반적으로 모든 단계는 일련의 목표이며 특정 작업을 수행합니다. (번역상은 맞는거같은데 이해가 잘안됨)

다양한 패키징 유형은 특정 단계에서 서로 다른 목표를 가질 수 있습니다. 예를 들어 jar 패키징 유형의 패키지 단계에서는 maven-jar-plugin의 jar goal이 실행됩니다. 반대로 war 프로젝트의 경우 maven-war-plugin의 war goal이 동일한 단계에서 실행됩니다.

(packaging 단계에서 jar 패키징 유형은 maven-jar-plugin의 jar goal 이 실행되고 war 패키징 유형은 maven-war-plugin의 war goal이 실행된다)

 

2.1. jar
Java 아카이브(또는 jar)는 가장 널리 사용되는 패키징 유형 중 하나입니다. 이 패키징 유형을 사용하는 프로젝트는 확장자가 .jar인 압축된 zip 파일을 생성합니다. 여기에는 순수 Java 클래스, 인터페이스, 리소스 및 메타데이터 파일이 포함될 수 있습니다.

먼저 jar에 대한 기본  goal-to-build-단계 바인딩 중 일부를 살펴보겠습니다.

  • resources: resources
  • compiler: compile
  • resources: testResources
  • compiler: testCompile
  • surefire: test
  • jar: jar
  • install: install
  • deploy: deploy

지체 없이 jar 프로젝트의 패키징 유형을 정의해 보겠습니다.

<packaging>jar</packaging>

아무 것도 명시되지 않았으면 Maven은 패키징 유형을 jar로 간주합니다. 

 

2.2. war
간단히 말해서 웹 애플리케이션 아카이브(또는 war)에는 웹 애플리케이션과 관련된 모든 파일이 포함되어 있습니다. 여기에는 Java 서블릿, JSP, HTML 페이지, 배포 descriptor 및 관련 리소스가 포함될 수 있습니다. 전반적으로 war는  jar와 동일한 목표 바인딩을 갖지만 한 가지 예외를 제외하면 전쟁의 패키지 단계에는 war라는 다른 목표가 있습니다.

의심의 여지 없이 jar와 war는 Java 커뮤니티에서 가장 인기 있는 패키징 유형입니다. 이 둘의 자세한 차이점을 읽어보면 흥미로울 것입니다.
웹 애플리케이션의 패키징 유형을 정의해 보겠습니다.

<packaging>war</packaging>

다른 패키징 유형인 ejb, par 및 rar도 비슷한 수명 주기를 갖고 있지만 각각 패키지 목표가 다릅니다.

 

2.3 ear

엔터프라이즈 애플리케이션 아카이브(ear)는 J2EE 애플리케이션이 포함된 압축 파일입니다. 이는 웹 모듈(war 파일로 패키지됨), EJB 모듈(jar 파일로 패키지됨) 또는 둘 다일 수 있는 하나 이상의 모듈로 구성됩니다.

다르게 말하면, ear는 jars와 wars의 상위 집합이며 애플리케이션을 실행하려면 애플리케이션 서버가 필요한 반면, war는 이를 배포하려면 웹 컨테이너나 웹 서버만 있으면 됩니다. 웹 서버와 애플리케이션 서버를 구별하는 측면과 Java에서 널리 사용되는 서버는 Java 개발자에게 중요한 개념입니다.
ear 에 대한 기본 목표 바인딩을 정의해 보겠습니다.

  • ear: generate-application-xml
  • resources: resources
  • ear: ear
  • install: install
  • deploy: deploy

이러한 프로젝트의 패키징 유형을 정의하는 방법은 다음과 같습니다.

<packaging>ear</packaging>

 

2.4. pom
모든 포장 유형 중에서 pom이 가장 간단한 유형입니다. aggregators 및 상위 프로젝트를 만드는 데 도움이 됩니다.
aggregators 또는 다중 모듈 프로젝트는 다양한 소스에서 나오는 하위 모듈을 조립합니다. 이러한 하위 모듈은 일반 Maven 프로젝트이며 자체 빌드 수명 주기를 따릅니다. aggregators POM에는 모듈 요소 아래에 하위 모듈에 대한 모든 참조가 있습니다.
상위 프로젝트를 사용하면 POM 간의 상속 관계를 정의할 수 있습니다. 상위 POM은 해당 버전과 함께 특정 구성, 플러그인 및 종속성을 공유합니다. 상위 요소의 대부분 요소는 해당 하위 요소에 상속됩니다. 예외에는 아티팩트 ID, 이름 및 필수 구성 요소가 포함됩니다.
처리할 리소스도 없고 컴파일하거나 테스트할 코드도 없기 때문입니다. 따라서 pom 프로젝트의 아티팩트는 실행 파일 대신 자체적으로 생성됩니다.
다중 모듈 프로젝트의 패키징 유형을 정의해 보겠습니다.

<packaging>pom</packaging>

이러한 프로젝트는  install and deploy 라는 두 단계로만 구성된 가장 간단한 수명 주기를 갖습니다.

 

2.5. maven-plugin
Maven은 다양하고 유용한 플러그인을 제공합니다. 그러나 기본 플러그인만으로는 충분하지 않은 경우가 있을 수 있습니다. 이 경우 도구는 프로젝트 필요에 따라 maven 플러그인을 생성할 수 있는 유연성을 제공합니다.
플러그인을 생성하려면 프로젝트의 패키징 유형을 설정하세요.

<packaging>maven-plugin</packaging>

maven-plugin의 수명주기는 jar의 수명주기와 비슷하지만 두 가지 예외가 있습니다.
플러그인: descriptor generate-resources 생성 단계에 바인딩됩니다.
플러그인: addPluginArtifactMetadata가 package 단계에 추가됩니다.
이러한 유형의 프로젝트에는 maven-plugin-api 종속성이 필요합니다.

 

2.6. ejb
Enterprise Java Bean(또는 ejb)은 확장 가능한 분산 서버측 애플리케이션을 만드는 데 도움이 됩니다. EJB는 종종 애플리케이션의 비즈니스 로직을 제공합니다. 일반적인 EJB 아키텍처는 EJB(Enterprise Java Bean), EJB 컨테이너 및 애플리케이션 서버의 세 가지 구성 요소로 구성됩니다.
이제 EJB 프로젝트의 패키징 유형을 정의해 보겠습니다.

<packaging>ejb</packaging>

ejb 패키징 유형도 jar 패키징과 비슷한 수명주기를 갖고 있지만 패키지 목표( package goal )는 다릅니다. 이 유형의 프로젝트에 대한 패키지 목표는 ejb:ejb입니다.

ejb 패키징 유형을 사용하는 프로젝트에는 수명 주기 목표를 실행하기 위해 maven-ejb-plugin이 필요합니다. Maven은 EJB 2 및 3을 지원합니다. 버전이 지정되지 않으면 기본 버전 2가 사용됩니다.

 

2.7. rar
리소스 어댑터(rar)는 애플리케이션 서버에 리소스 어댑터를 배포하기 위한 유효한 형식으로 사용되는 아카이브 파일입니다. 기본적으로 Java 애플리케이션을 EIS(Enterprise Information System)에 연결하는 시스템 수준 드라이버입니다.
rar 의 패키징 유형 선언은 다음과 같습니다.

<packaging>rar</packaging>

 

3. 기타 패키징 유형

지금까지 Maven이 기본으로 제공하는 다양한 패키징 유형을 살펴보았습니다. 이제 프로젝트에서 .zip 확장자를 가진 아티팩트를 생성한다고 가정해 보겠습니다. 이 경우 기본 패키징 유형은 도움이 되지 않습니다.
Maven은 또한 플러그인을 통해 더 많은 패키징 유형을 제공합니다. 이러한 플러그인의 도움으로 맞춤형 패키징 유형과 빌드 수명주기를 정의할 수 있습니다. 이러한 유형 중 일부는 다음과 같습니다.

  • msi
  • rpm
  • tar
  • tar.bz2
  • tar.gz
  • tbz
  • zip

사용자 정의 유형을 정의하려면 패키징 유형과 라이프사이클 단계를 정의해야 합니다. 이를 위해 src/main/resources/META-INF/plexus 디렉터리 아래에 Components.xml 파일을 만듭니다.

<component>
   <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
   <role-hint>zip</role-hint>
   <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
   <configuration>
      <phases>
         <process-resources>org.apache.maven.plugins:maven-resources-plugin:resources</process-resources>
         <package>com.baeldung.maven.plugins:maven-zip-plugin:zip</package>
         <install>org.apache.maven.plugins:maven-install-plugin:install</install>
         <deploy>org.apache.maven.plugins:maven-deploy-plugin:deploy</deploy>
      </phases>
   </configuration>
</component>

Maven은 새로운 패키징 유형과 수명주기에 대해 아무것도 모릅니다. 이를 표시하려면 프로젝트의 pom 파일에 플러그인을 추가하고 확장자를 true로 설정하겠습니다.

<plugins>
    <plugin>
        <groupId>com.baeldung.maven.plugins</groupId>
        <artifactId>maven-zip-plugin</artifactId>
        <extensions>true</extensions>
    </plugin>
</plugins>

이제 프로젝트를 스캔할 수 있으며 시스템은 플러그인과 Components.xml 파일도 조사합니다. 이러한 모든 유형 외에도 Maven은 외부 프로젝트 및 플러그인을 통해 다른 많은 패키징 유형을 제공합니다. 예를 들어 nar(네이티브 아카이브), swf 및 swc는 Adobe Flash 및 Flex 콘텐츠를 생성하는 프로젝트의 패키징 유형입니다. 이러한 프로젝트에는 사용자 정의 패키징을 정의하는 플러그인과 해당 플러그인이 포함된 저장소가 필요합니다.

 

4. 결론

이번 글에서는 Maven에서 사용할 수 있는 다양한 패키징 유형을 살펴보았습니다. 또한 이러한 유형이 무엇을 나타내고 수명 주기에서 어떻게 다른지 익숙해졌습니다. 마지막에는 사용자 정의 패키징 유형을 정의하고 기본 빌드 수명 주기를 사용자 정의하는 방법도 배웠습니다.
Baeldung의 모든 코드 예제는 Maven을 사용하여 빌드되었습니다. 0n GitHub를 통해 다양한 Maven 구성을 확인해 보세요.

+ Recent posts