maven의 "pom"패키징이란 무엇입니까?


175

컴파일하고 Tomcat 서버에 배포 할 수있는 maven 프로젝트가 주어졌습니다. 나는 오늘 전에 maven을 사용한 적이 없지만 꽤 인터넷 검색을 해왔다. pom.xml이 프로젝트의 최상위 파일에 패키징 유형이로 설정된 것 같습니다 pom.

mvn install이 응용 프로그램을 배포 한 후에는 어떻게해야 합니까? war어딘가 또는 무언가 파일 을 찾을 수있을 것으로 기대 했지만 잘못된 위치를 찾거나 단계를 놓친 것 같습니다.


3
설치 MVN - 이것은 당신의 로컬 저장소에 유물 (항아리, 전쟁, 귀) 설치에 사용된다 (보통은 ~ / .m2 / 저장소 direcotry 수 있습니다)
의 Łukasz Siwiński

답변:


148

pom기본적으로 하위 모듈의 컨테이너이며 각 하위 모듈은 패키징 pom.xml과 동일한 디렉토리에 하위 디렉토리로 표시 됩니다 pom.

어딘가에 프로젝트 구조 내에 중첩되어 war패키징 이있는 아티팩트 (모듈)를 찾을 수 있습니다. Maven은 일반적으로 모든 것을 /target각 모듈의 서브 디렉토리에 빌드 합니다. 그래서 이후 mvn install에 모양 target과 모듈의 하위 디렉토리 war포장.

물론이야:

$ find . -iname "*.war"

똑같이 잘 작동합니다 ;-).


45

pom 패키징은 단순히 주요 아티팩트가 전쟁이나 병이 아니라 pom.xml 자체를 나타내는 사양입니다.

종종 해당 프로젝트의 하위 디렉토리에 포함 된 "모듈"과 함께 사용됩니다. 그러나 기본 바이너리를 만들지 않은 특정 시나리오에서 사용될 수 있으며 다른 모든 중요한 아티팩트는 보조 아티팩트로 선언되었습니다.

"문서화"프로젝트를 생각해 보면, 1 차 아티팩트는 PDF 일 수 있지만 이미 빌드되었으며,이를 2 차 아티팩트로 선언하는 작업은 구성을 통해 maven에게 필요하지 않은 PDF를 작성하는 방법을 알려줄 수 있습니다. 컴파일되었습니다.


내가 pom 프로젝트 ==> 추상 클래스 및 내부의 모듈 ==> 콘크리트 클래스와 비슷한 줄에서 생각할 수있는 다른 예.
bharatj

22

패키징은 pom다른 프로젝트를 집계하는 프로젝트와 일부 플러그인의 유물이 유용한 출력 만있는 프로젝트에서 사용됩니다. 귀하의 경우에는, 나는 것 같아요 최상위 POM에 포함되어있는 <modules>...</modules>다른 디렉토리를 집계하고, 실제 출력은 다른 (아마도 하위) 디렉토리 중 하나의 결과입니다. 이 목적을 위해 현명하게 코딩 된 패키지는 war.


1
"유용한 출력 만 일부 플러그인의 첨부 된 아티팩트"란 무엇입니까?
omjego

9

mvn : install 할 때 간단히 질문에 대답하기 위해 maven은 ( pom.xml의 패키징 속성)을 기반으로 패키징 된 아티팩트를 생성 합니다. maven 설치를 실행 한 후 확장자가 .package 인 파일을 찾을 수 있습니다

  • 프로젝트 작업 공간의 대상 디렉토리에서
  • 또한 maven 2 로컬 저장소 가 상자에서 ( .m2 / respository )를 검색하는 경우 아티팩트는 .m2 저장소의 ( groupId / artifactId / artifactId-version.packaging ) 디렉토리 아래에 나열됩니다.
  • 디렉토리를 보면 패키지 확장자 파일과 pom 확장자가 있습니다 (pom 확장자는 기본적 으로이 패키지를 생성하는 데 사용되는 pom.xml입니다)
  • maven 프로젝트가 멀티 모듈 인 경우 각 모듈은 pom 만있는 최상위 프로젝트를 제외하고 위에서 설명한 것처럼 두 개의 파일을 만듭니다.

8

아티팩트를 POM으로 패키징하면 라이프 사이클이 매우 단순함을 의미합니다.

package -> install -> deploy

http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

이는 다른 패키징 유형에 맞지 않는 pom.xml 파일 또는 프로젝트를 배포 할 때 유용합니다.

우리는 많은 프로젝트에 pom 포장을 사용하고 적절한 단계와 목표를 추가합니다.

예를 들어 일부 응용 프로그램은 다음을 사용합니다.

prepare-package -> test -> package -> install -> deploy

응용 프로그램을 설치할 때 응용 프로그램을 로컬 .m2 저장소에 추가해야합니다. 다른 곳에 게시하려면 올바른 배포 관리 정보를 설정해야합니다. Maven이 아티팩트를 자동으로 첨부하지 않으면 maven builder 헬퍼 플러그인을 사용해야 할 수도 있습니다.


6

http://maven.apache.org/guides/getting-started/index.html#How_do_I_build_more_than_one_project_at_once 에서 고전적인 예를 볼 것을 제안합니다 .

여기서 my-webapp는 웹 프로젝트이며 my-app 프로젝트의 코드에 따라 다릅니다. 따라서 두 개의 프로젝트를 하나로 묶기 위해 최상위 번들 pom.xml이 있으며 마지막으로 번들 할 프로젝트 (maven 용어 당 모듈)를 언급합니다. 이러한 최상위 pom.xml은 pom 패키징을 사용할 수 있습니다.

my-webapp은 war 패키지를 가질 수 있으며 my-app에 종속 될 수 있습니다. 내 응용 프로그램은 병 포장을 가질 수 있습니다.


2

실제 사용 사례

자바가 많은 회사에서 우리는 넥서스 아티팩트 저장소에 들어가는 파이썬 프로젝트를 가졌습니다. 파이썬에는 실제로 아티팩트가 없으므로 단순히 파이썬 파일을 .tar 또는 .zip하고 밀어 넣기를 원했습니다. 리포지토리에는 이미 maven 통합이 있었으므로 maven 어셈블리 플러그인<packaging>pom</packaging> 과 함께 designator를 사용 하여 Python 프로젝트를 패키지로 만들고 업로드했습니다..zip

단계는이 SO 포스트에 요약되어 있습니다


1

"pom"포장은 단지 용기, 전쟁 및 귀와 같은 다른 패키지 / 모듈을 포함하는 용기 일뿐입니다.

mvn clean compile install과 같은 외부 패키지 / 컨테이너에서 작업을 수행하는 경우. 그런 다음 내부 패키지 / 모듈도 깔끔하게 컴파일 설치됩니다.

각 패키지 / 모듈에 대해 별도의 작업을 수행 할 필요가 없습니다.


1

https://maven.apache.org/pom.html

패키징 유형은 상위 및 집계 (멀티 모듈) 프로젝트에 대한 pom이어야합니다. 이러한 유형은 일련의 수명주기 단계에 바인딩 된 목표를 정의합니다. 예를 들어, 패키징이 jar 인 경우 패키지 단계에서 jar : jar 목표를 실행합니다. 패키징이 pom 인 경우 실행 목표는 site : attach-descriptor입니다.


0

POM (Project Object Model)은 프로젝트를 빌드하기위한 자동화 스크립트 일뿐입니다. 자동화 스크립트를 XML로 작성할 수 있으며, 빌드 스크립트 파일은 다른 자동화 도구에서 다른 이름으로 지정됩니다

ANT에서 build.xml을 호출하고 MAVEN에서 pom.xml을 호출하는 것처럼

MAVEN은 항아리, 전쟁, 귀 및 POM을 우리 모두에게 새로운 것을 포장 할 수 있습니다

WHAT IS POM.XML을 확인하려면

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.