2013-03-05 3 views
4

부모를 정의하기 위해 pom.xml로 프로젝트를 선언했으며 포함 된 모든 모듈의 원자로 빌드를 트리거합니다. 모든 것이 잘되고 잘 작동합니다. 올바른 순서로 빌드되고 모든 테스트가 올바르게 실행되며 예상 한 결과를 얻습니다.POM.xml에 부모 선언이 있어야합니까?

프로젝트 중 하나는 공유 라이브러리입니다. 여기에 <parent> 선언을 추가하고 싶지 않으므로 그렇게하지 않았습니다. 그것은 모두 여전히 작동합니다.

내 질문 : 하위 프로젝트에서 상위 프로젝트 선언을 추가해야합니까? 프로젝트 간 양방향 관계를 유지하는 데있어 찬반 양론이란 무엇입니까? 선언문을 추가하지 않으면 무언가가 작동을 멈 추면 나중에 더 어렵게 만들 것입니까?

단일 질문으로 바꿔서 : 왜 모듈 pom.xml 파일에 <parent> 구성이 필요합니까?

답변

8

질문은 프로젝트 상속과 프로젝트 집계의 차이점과 관련이 있습니다. <parent> 참조는 상속 관계를 정의합니다. 상위 pom.xml의 <modules> 섹션은 집계를 정의합니다. 그들은 다르다.

<parent> 구성이 pom.xml 모듈에 없으면 상위 pom.xml 구성을 상속하지 않습니다. 따라서 <dependencyManagement> 섹션에있는 부모 pom의 종속성 버전을 정의한다고 가정 해 봅시다. 부모 참조가없는 pom.xml 모듈은 상속하지 않습니다. 또는 모든 하위 모듈에서 공통 라이브러리를 사용해야하는 경우 상위 pom.xml에서 종속성을 정의 할 수 있습니다. 그러나 부모 참조가없는 pom.xml 모듈은 해당 종속성을 상속하지 않습니다.

자세한 내용은, 그것은 당신이 빌드를 구성하는 방법에 따라 달라집니다 Project Inheritance vs Project Aggregation

0

확인하시기 바랍니다. 부모 부모가 올바르게 구성된 경우 version and groupid과 같은 기본 정보를 프로젝트간에 공유 할 수 있습니다.

프로젝트의 모든 모듈에서 공유해야하는 프로젝트 전체 구성 정보를 정의 할 수 있습니다. 예를 들면 다음과 같습니다.

<modelVersion>4.0.0</modelVersion> 
<groupId>groupd.id</groupId> 
<artifactId>artifact.id</artifactId> 
<packaging>pom</packaging> 
<version>version</version> 

모듈 프로젝트에서 해당 정보를 복제하지 않아도됩니다. 동일한 정보를 다음과 같이 참조 할 수 있습니다.

<parent> 
    <groupId>group.id</groupId> 
    <artifactId>artifact.id</artifactId> 
    <version>version</version> 
</parent> 

위의 지정된 정보보다 상위 정보를 공유하는 데 사용할 수 있습니다. 의존성 관리, 플러그인 관리 및 재사용 가능한 프로파일 정의를 할 수 있습니다.