문제

나도 알아요 모베 톤 하루에 두 번 물어봐야 하는데 여기에 또 다른 Maven 퍼즐이 있습니다.

5개의 모듈(5개의 하위 프로젝트)을 정의하는 상위 POM이 있습니다.각 모듈은 내가 끌어온 것과 똑같은 방식으로 실행되므로 <profile><build> 섹션을 상위 POM에 추가하여 중복 코드를 제거하세요.이제 각 모듈에서 개별적으로 빌드를 실행하면 작동하지만 모든 모듈을 한 번에 빌드하고 상위 디렉터리로 이동하려면 Maven이 실행하려고 하는 첫 번째 작업이 상위 프로젝트 자체이기 때문에 오류가 발생합니다.

mvn package -P release
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO]   DWD Parent project
[INFO]   Projects

그 후 exec 플러그인이 존재하지 않는 것을 실행하려고 시도하기 때문에 빌드가 실패합니다.출력을 보면 리액터 플러그인이 빌드를 구동하고 있다는 것이 꽤 분명하지만 상위를 건너뛰도록 리액터를 어떻게 구성할 수 있습니까?

추신혼란을 방지하기 위해 상위 프로필 실행을 억제하고 하위 프로필 실행 중에 활성화하려고 합니다. same 짓다

도움이 되었습니까?

해결책

부모를 구축하여 무엇이 잘못 되었습니까?

실제로 Maven에는 두 가지 다른 개념이 있습니다 (일반적으로 동시에 사용됨).

  • 부모님 pom
  • 모듈 집계

첫 번째는 모든 어린이들에게 공통적 인 모든 것에 대한 정의입니다. 부모를 POM 패키지 프로젝트로 정의하고 저장소에 설치할 수 있습니다.

이 부모의 자녀를 쌓을 때 Maven2는이 부모를 회수하여 부모 Pom을 자녀 POM과 병합합니다. 명령을 실행하여 전체 pom.xml을 볼 수 있습니다. mvn help:effective-pom.

이 경우, 상위 POM은 구축되지 않으며 저장소에서 검색됩니다.

두 번째 사례는 a를 포함하는 프로젝트입니다 modules 하위 프로젝트 목록. 원칙은이 프로젝트에서 실행 한 모든 명령이 모든 하위 모듈에서 실행된다는 것입니다. 모듈의 순서는 반응기에 의해 정의되며, 이는 다른 모듈보다 먼저 구축되어야하는 모듈을 찾기 위해 모듈 간 종속성을 살펴 봅니다. 종속성이 없으면 모듈 목록이 부모 pom.xml에 정의 된대로 목록을 취합니다.

이 경우 루트 프로젝트에서 명령을 실행하면 Maven2가 먼저 루트 프로젝트를 구축 한 다음 하위 모듈을 구축합니다. 너 할 수 없습니다 루트 프로젝트의 생성을 건너 뜁니다.


Richseller 의견 덕분에 편집

멀티 모듈 (Aggregation Project)과 상속 (부모 프로젝트)의 차이점에 대한 완전한 설명은 Maven Book에서 찾을 수 있습니다. 여기.

다른 팁

상위 빌드를 건너뛸 수는 없지만 약간의 해킹으로 프로필이 활성화되지 않도록 구성할 수 있습니다. 이 답변 파일 기반 프로필의 유무에 따라 프로필 활성화를 제어하는 ​​방법을 보여줍니다. <activation> 요소.이 방법으로 상위 항목에서 프로필을 정의할 수 있지만 상위 항목에 마커 파일이 있기 때문에 해당 프로젝트에서는 프로필이 비활성화됩니다.하위 프로젝트에는 소스에 마커 파일이 없으므로 해당 프로젝트에 대해 프로필이 활성화됩니다.

명확히 하기 위해 업데이트합니다:내 테스트 프로젝트에서 이 구성은 프로필이 상위 프로젝트(src/main/resources에 파일이 있음)에서 비활성화되었지만 해당 리소스 디렉터리에 파일이 없는 모든 하위 프로젝트에서는 활성화되었음을 의미합니다.

<profile>
  <id>test</id>
  <activation>
    <file>
      <missing>src/main/resources/test.marker</missing>
    </file>
  </activation>
  ...
</profile>

내 상황에 부분적 타협이 있음을 문서화하고 싶습니다 (제안을 위해 Maven 사용자 메일 링리스트의 사람들에게 감사합니다). 기본적으로 프로파일을 두 조각으로자를 필요가 있습니다. 재사용 가능 configuration 플러그인 섹션 executions 아이 폼에 머물러 있습니다. 그런 다음 자식의 프로필 플러그인은 다음과 같이 표시됩니다. inherited 그리고 voila- 실행 시간에 부모 프로파일이 누락되어 실행되지 않습니다. executions 부분. 이것은 이상적이지 않지만 작동합니다. 나타내다 이 링크에 예를 들어

위의 Rick Seller가 제공한 "누락된" 파일 솔루션을 구현할 수 없었습니다.일단 설정된 프로필의 활성/비활성 상태는 마커 파일이 모듈에서 누락된 경우에도 변경되지 않는 것 같습니다.그러나 여기에 내 문제에 대한 정확한 해결책이 있습니다.경고:이는 Maven 2.1 이상부터만 사용할 수 있습니다.

2개의 모듈이 정의된 상위 POM이 있는 경우:foo 및 boo 일반적인 상황에서 실행 순서는 다음과 같습니다.

  1. 부모의
  2. 우우

상위 빌드를 건너뛰기 위해 해야 할 일은 이 명령줄 스위치를 추가하는 것뿐입니다.

mvn install –rf foo

또는 다음을 사용할 수 있습니다. --resume-from 그것이 할 일은 부모를 건너뛰고 foo 모듈부터 계속하는 것입니다.지금 - Reactor 플러그인을 구성하여 이것이 달성될 수 있는지 조사 중입니다. (추신.- 아니 그럴 수 없어) 하지만 스위치를 사용해도 위의 시나리오는 나에게 잘 작동합니다.

이것은 같은 질문에 대한 @Romaintaz의 답변에 의해 암시됩니다. Maven- 학부모 프로젝트 빌드를 건너 뛰십시오

그러나이 명시 적으로, 부모 POM에서 포장 요소를 POM으로 지정하는 것이 필수적입니다 (항아리 나 전쟁이 아님).
예시:

<packaging>pom</packaging>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top