[java] Maven 모듈 + 단일 특정 모듈 구축

나는 부모 프로젝트와 다중 모듈 Maven 프로젝트가 P와 세 개의 하위 모듈 A, BC. 모두 BC전쟁 프로젝트는 둘 다에 달려있다 A.

내가 입력 할 수 mvn compile있는 P제대로 컴파일 된 서브 모듈을 모두 가지고있다. 특정 모듈에 대한 작업을 수행하려고 할 때 문제가 발생합니다.

프로젝트를 위해 전쟁을 패키징하고 싶지만 디렉토리 B에서 package 명령을 실행하면에 B대한 종속성을 찾을 수 없다고 불평합니다 A.

나는이 질문에서 이해합니다 : Maven 은 아마도 Maven이 이러한 유형의 종속성 해결을 위해 설계되지 않았지만 어떻게 패키지 B해야합니까?

  1. mvn package정말로 원할 때 전체 프로젝트 계층에 대해 실행해야 B합니까?

  2. 패키지를 만들 때마다 A의 스냅 샷을 로컬 리포지토리에 설치해야 B합니까?

이 두 번째 시나리오는 A여전히 활발한 개발 중에 있을 때 그리 재미 있지 않습니다 .

여기에 모범 사례가 있습니까?



답변

여기에 모범 사례가 있습니까?

Maven 고급 원자로 옵션 을보다 구체적으로 사용하십시오 .

-pl, --projects
        Build specified reactor projects instead of all projects
-am, --also-make
        If project list is specified, also build projects required by the list

따라서 cd부모 P 디렉토리로 들어가서 다음을 실행하십시오.

mvn install -pl B -am

그리고 이것은 B와 B에 필요한 모듈을 구축 할 것입니다.

artifactId디렉토리 이름과 다른 것을 참조하는 경우 콜론을 사용해야합니다 .

mvn install -pl :B -am

여기에 설명 된대로 : https://stackoverflow.com/a/26439938/480894


답변

Parent pom.xml에 6 개의 모듈이 있으며 A , BF 를 실행한다고 가정하십시오 .

<modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
        <module>D</module>
        <module>E</module>
        <module>F</module>
  </modules>

1- 부모 프로젝트로 cd

 mvn --projects A,B,F --also-make clean install

또는

mvn -pl A,B,F -am clean install

또는

mvn -pl A,B,F -amd clean install

참고 : -am 을 사용하여 프로젝트를 지정할 때 옵션 Maven은 지정된 프로젝트가 의존하는 모든 프로젝트를 (직접 또는 간접적으로) 빌드합니다. Maven은 프로젝트 목록을 검토하고 종속성 트리를 내려 가서 빌드해야하는 모든 프로젝트를 찾습니다.

-am 명령은 다중 모듈 빌드에서 특정 프로젝트에 필요한 모든 프로젝트를 만드는 반면 -amd 또는 –also -make-dependents 옵션은 Maven이 프로젝트 및 해당 프로젝트에 종속 된 프로젝트를 빌드하도록 구성합니다. –also-make-dependents를 사용할 때 Maven은 원자로의 모든 프로젝트를 검사하여 특정 프로젝트에 의존하는 프로젝트를 찾습니다. 자동으로 해당 프로젝트를 빌드하고 다른 것은 없습니다.


답변

Maven은 이러한 유형의 종속성을 위해 설계되었습니다.

mvn package 로컬 리포지토리에 아무것도 설치하지 않고 프로젝트를 패키징하고 대상 폴더에 남겨 둡니다.

수행 mvn install이 모든 서브 모듈은, 컴퓨터의 메이븐 저장소에 설치됩니다로, 상위 프로젝트 (A)에서 방금 / 컴파일 서브 모듈 패키지 (B)와 메이븐은 이미 포장 걸릴 필요가 변경이없는 경우 의존성을 바로 설치했습니다.

당신은 단지 필요 mvn install당신이 코드의 일부를 업데이트 한 경우 부모 프로젝트.


답변

이전 에 프로젝트 B에서 mvn install 을 실행 한 경우 로컬 저장소에 설치되어 패키지 A를 빌드 할 때 Maven이 종속성을 해결할 수 있습니다. 따라서 프로젝트 B를 변경할 때마다 프로젝트 B를 설치하는 한 프로젝트 A의 빌드는 최신 상태입니다.

집합 자 pom을 사용하여 다중 모듈 프로젝트를 정의하여 프로젝트 세트를 빌드 할 수 있습니다.

m2eclipse에 대해서도 언급 할 가치가 있으며 Maven을 Eclipse에 통합하고 작업 공간의 종속성을 (선택적으로) 해결할 수 있습니다. 따라서 여러 프로젝트를 해킹하는 경우 작업 영역 컨텐츠가 컴파일에 사용됩니다. 변경 사항에 만족하면 mvn install (각 프로젝트에서 차례로 또는 집계자를 사용하여)을 실행하여 로컬 리포지토리에 저장하십시오.


답변

내 답변 Maven 및 종속 모듈을 살펴보십시오 .

메이븐 원자로 플러그인 프로젝트의 일부를 구축 처리하도록 설계되었습니다.

당신이 그것을 사용하려는 특정 목표 reactor:make.


답변

당신은 “정말 그냥 B를 원한다”고 말하지만, 이것은 거짓입니다. B를 원하지만 변경 사항이있는 경우 업데이트 된 A도 원합니다 ( “활성 개발”).

따라서 때때로 A, B 및 C로 작업하려고합니다.이 경우 어 그리 게이터 프로젝트 P가 있습니다. A 및 B로 작업하려는 경우 ( C 원하지 않음 ) 어 그리 게이터 프로젝트 Q를 작성해야합니다. .

2016 편집 : 위의 정보는 2009 년에 관련되었을 수 있습니다. 2016 년 현재 대부분의 경우이를 무시 하고 허용 된 답변에 설명 된대로 -am또는 -pl명령 줄 플래그를 사용하는 것이 좋습니다 . v2.1 이전의 maven 버전을 사용하는 경우 먼저 변경하십시오 🙂


답변