1. 개요
패키징 유형은 모든 Maven 프로젝트의 중요한 측면입니다. 프로젝트가 생성하는 아티팩트의 유형을 지정합니다. 일반적으로 빌드는 jar , war , pom 또는 기타 실행 파일을 생성합니다.
Maven은 많은 기본 패키징 유형을 제공하며 사용자 정의 패키징 유형을 정의할 수 있는 유연성도 제공합니다.
이 예제에서는 Maven 패키징 유형에 대해 자세히 알아볼 것입니다. 먼저 Maven의 빌드 수명 주기를 살펴보겠습니다. 그런 다음 각 패키징 유형, 해당 유형이 나타내는 내용 및 프로젝트 수명 주기에 미치는 영향에 대해 논의합니다. 마지막으로 사용자 정의 패키징 유형을 정의하는 방법을 살펴보겠습니다.
2. 기본 포장 유형
Maven 은 jar , war , ear , pom , rar , ejb 및 maven-plugin 을 포함하는 많은 기본 패키징 유형을 제공합니다 . 각 패키징 유형은 단계로 구성된 빌드 수명 주기를 따릅니다. 일반적으로 모든 단계는 일련의 목표이며 특정 작업을 수행합니다.
다른 포장 유형은 특정 단계에서 다른 목표를 가질 수 있습니다. 예를 들어 jar 패키징 유형 의 패키지 단계 에서는 maven-jar-plugin 의 jar 목표가 실행됩니다. 반대로 전쟁 프로젝트의 경우 maven-war-plugin 의 전쟁 목표가 같은 단계에서 실행됩니다.
2.1. 항아리
Java 아카이브(또는 jar) 는 가장 널리 사용되는 패키징 유형 중 하나입니다. 이 패키징 유형의 프로젝트는 확장자 가 .jar인 압축된 zip 파일을 생성합니다 . 여기에는 순수 Java 클래스, 인터페이스, 리소스 및 메타데이터 파일이 포함될 수 있습니다.
먼저 jar 에 대한 기본 목표-구축 단계 바인딩을 살펴보겠습니다 .
- 자원: 자원
- 컴파일러: 컴파일
- 리소스: testResources
- 컴파일러: testCompile
- 확실한: 테스트
- 항아리: 항아리
- 설치하다: 설치하다
- 전개하다: 전개하다
지체 없이 jar 프로젝트 의 패키징 유형을 정의해 보겠습니다 .
<packaging>jar</packaging>
아무 것도 지정하지 않은 경우 Maven은 패키징 유형을 jar로 가정합니다 .
2.2. 전쟁
간단히 말해서 웹 애플리케이션 아카이브 또는 전쟁 에는 웹 애플리케이션과 관련된 모든 파일이 포함됩니다. 여기에는 Java 서블릿, JSP, HTML 페이지, 배포 설명자 및 관련 리소스가 포함될 수 있습니다. 전반적으로, 전쟁은 A와 같은 목표 바인딩이 항아리 ,하지만 한 가지 예외의 년 - 패키지 상 전쟁 이다 다른 목표를 가지고 전쟁을 .
의심할 여지 없이 jar 및 war 는 Java 커뮤니티에서 가장 인기 있는 패키징 유형입니다. 이 둘 의 자세한 차이점은 흥미로운 읽을거리가 될 것입니다.
웹 애플리케이션의 패키징 유형을 정의해 보겠습니다.
<packaging>war</packaging>
다른 패키징 유형 ejb , par 및 rar 도 유사한 수명 주기를 갖지만 각각 다른 패키지 목표를 가지고 있습니다.
ejb:<em>ejb</em> or par:<em>par</em> or rar:<em>rar</em>
2.3. 귀
엔터프라이즈 애플리케이션 아카이브 또는 귀 는 J2EE 애플리케이션을 포함하는 압축 파일입니다. 이것은 웹 모듈( war 파일 로 패키징됨 ) 또는 EJB 모듈( jar 파일 로 패키징됨 ) 또는 둘 다일 수 있는 하나 이상의 모듈로 구성됩니다 .
다르게 말하면, ear 은 jar 와 war 의 상위 집합이며 애플리케이션을 실행하기 위해 애플리케이션 서버가 필요 하지만 war 에서는 배포하기 위해 웹 컨테이너 또는 웹 서버만 필요합니다. 웹 서버와 애플리케이션 서버를 구별하는 측면과 이러한 인기 서버가 Java에서 무엇인지 는 Java 개발자에게 중요한 개념입니다.
귀에 대한 기본 목표 바인딩을 정의해 보겠습니다 .
- 귀: 생성-응용 프로그램-xml
- 자원: 자원
- 귀: 귀
- 설치하다: 설치하다
- 전개하다: 전개하다
이러한 프로젝트의 패키징 유형을 정의하는 방법은 다음과 같습니다.
<packaging>ear</packaging>
2.4. 퐁
모든 포장 유형 중에서 pom 이 가장 간단한 포장 유형 입니다. 애그리게이터와 상위 프로젝트를 만드는 데 도움이 됩니다.
애그리게이터 또는 다중 모듈 프로젝트 는 다른 소스에서 오는 하위 모듈을 어셈블합니다. 이 하위 모듈은 일반 Maven 프로젝트이며 자체 빌드 수명 주기를 따릅니다. 애그리게이터 POM에는 modules 요소 아래에 있는 모든 하위 모듈 참조가 있습니다.
상위 프로젝트를 사용하면 POM 간의 상속 관계를 정의할 수 있습니다. 상위 POM은 버전과 함께 특정 구성, 플러그인 및 의존성을 공유합니다. 부모의 대부분의 요소는 자식에 의해 상속됩니다. 예외에는 artifactId , name 및 전제 조건이 있습니다.
처리할 리소스와 컴파일하거나 테스트할 코드가 없기 때문입니다. 따라서 pom 프로젝트의 아티팩트는 실행 파일 대신 자체적으로 생성됩니다.
다중 모듈 프로젝트의 패키징 유형을 정의해 보겠습니다.
<packaging>pom</packaging>
이러한 프로젝트는 설치 및 배포의 두 단계로 구성된 가장 간단한 수명 주기를 갖습니다 .
2.5. 메이븐 플러그인
Maven은 다양한 유용한 플러그인을 제공합니다. 그러나 기본 플러그인이 충분하지 않은 경우가 있습니다. 이 경우 도구는 프로젝트 요구에 따라 maven-plugin 을 생성 할 수 있는 유연성을 제공 합니다.
플러그인을 만들려면 프로젝트의 패키징 유형을 설정하세요.
<packaging>maven-plugin</packaging>
받는다는 - 플러그인 과 같은 라이프 사이클이 항아리 라이프 사이클의, 그러나이 개 예외 :
- 플러그인: 설명 자는 자원 생성 단계에 바인딩됩니다.
- 플러그인: addPluginArtifactMetadata 가 패키지 단계에 추가됩니다.
이 유형의 프로젝트에는 maven-plugin-api 의존성이 필요합니다.
2.6. ejb
Enterprise Java Beans(또는 ejb)는 확장 가능한 분산 서버 측 응용 프로그램을 만드는 데 도움이 됩니다. EJB는 종종 애플리케이션의 비즈니스 로직을 제공합니다. 일반적인 EJB 아키텍처는 EJB(Enterprise Java Beans), EJB 컨테이너 및 애플리케이션 서버의 세 가지 구성 요소로 구성됩니다.
이제 EJB 프로젝트의 패키징 유형을 정의해 보겠습니다.
<packaging>ejb</packaging>
EJB의 포장 유형은 또한 유사한 라이프 사이클이 항아리 포장을하지만, 다른 패키지의 목표. 이 유형의 프로젝트에 대한 패키지 목표는 ejb: ejb 입니다.
ejb 패키징 유형 의 프로젝트는 수명 주기 목표를 실행하기 위해 maven-ejb-plugin 이 필요합니다 . Maven은 EJB 2 및 3에 대한 지원을 제공합니다. 버전을 지정하지 않으면 기본 버전 2가 사용됩니다.
2.7. 라르
리소스 어댑터(또는 rar) 는 애플리케이션 서버에 리소스 어댑터를 배포하는 데 유효한 형식으로 사용되는 아카이브 파일입니다. 기본적으로 Java 응용 프로그램을 EIS(Enterprise Information System)에 연결하는 시스템 수준 드라이버입니다.
리소스 어댑터의 패키징 유형 선언은 다음과 같습니다.
<packaging>rar</packaging>
모든 리소스 어댑터 아카이브는 소스 코드가 포함 된 jar 파일과 배포 설명자 역할을 하는 ra.xml 의 두 부분으로 구성됩니다 .
다시 말하지만, 라이프사이클 단계는 한 가지 예외를 제외 하고 jar 또는 war 패키징과 동일합니다 . 패키지 단계 는 아카이브를 패키징하기 위해 maven-rar-plugin 으로 구성된 rar 목표를 실행합니다 .
3. 기타 포장 유형
지금까지 Maven이 기본으로 제공하는 다양한 패키징 유형을 살펴보았습니다. 이제 프로젝트가 .zip 확장자를 가진 아티팩트를 생성하기를 원한다고 상상해 봅시다 . 이 경우 기본 패키징 유형은 도움이 되지 않습니다.
Maven은 또한 플러그인을 통해 더 많은 패키징 유형을 제공합니다. 이러한 플러그인의 도움으로 사용자 정의 패키징 유형과 빌드 수명 주기를 정의할 수 있습니다. 이러한 유형 중 일부는 다음과 같습니다.
- msi
- rpm
- 타르
- tar.bz2
- tar.gz
- tbz
- 지퍼
사용자 정의 유형을 정의하려면 패키지 유형 과 라이프사이클의 단계 를 정의해야 합니다 . 이를 위해 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>
이제 프로젝트를 스캔할 수 있으며 시스템은 플러그인 과 compnenets.xml 파일도 조사합니다.
이 모든 유형 외에도 Maven은 외부 프로젝트 및 플러그인을 통해 다른 많은 패키징 유형을 제공합니다. 예를 들어, nar (네이티브 아카이브), swf 및 swc 는 Adobe Flash 및 Flex 컨텐츠를 생성하는 프로젝트의 패키징 유형입니다. 이러한 프로젝트의 경우 사용자 정의 패키징을 정의하는 플러그인과 플러그인이 포함된 저장소가 필요합니다.
4. 결론
이 기사에서는 Maven에서 사용할 수 있는 다양한 패키징 유형을 살펴보았습니다. 또한 이러한 유형이 나타내는 것과 수명 주기에서 어떻게 다른지 알게 되었습니다. 마지막으로 사용자 지정 패키징 유형을 정의하고 기본 빌드 수명 주기를 사용자 지정하는 방법도 배웠습니다.
Baeldung의 모든 코드 예제는 Maven을 사용하여 빌드됩니다. 0n GitHub를 통해 다양한 Maven 구성을 확인하십시오 .