[java] maven의 “pom”패키징이란 무엇입니까?

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

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



답변

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

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

물론이야:

$ find . -iname "*.war"

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


답변

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

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

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


답변

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


답변

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

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

답변

아티팩트를 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 헬퍼 플러그인을 사용해야 할 수도 있습니다.


답변

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에 종속 될 수 있습니다. 내 응용 프로그램은 병 포장을 가질 수 있습니다.


답변

실제 사용 사례

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

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