내 생각에,이 질문에 대답하려면 프로젝트 수명주기와 버전 관리 측면에서 생각해야합니다. 다시 말해서, 부모 pom은 자체 수명주기를 가지고 있습니까? 즉 다른 모듈과 별도로 분리 될 수 있습니까?
대답이 ' 예 '인 경우 (질문이나 의견에 언급 된 대부분의 프로젝트의 경우) 부모 pom은 VCS와 Maven 관점에서 자신의 모듈을 필요로하므로 결국 끝납니다. VCS 수준에서 다음과 같이하십시오.
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
`-- projectA
|-- branches
|-- tags
`-- trunk
|-- module1
| `-- pom.xml
|-- moduleN
| `-- pom.xml
`-- pom.xml
이것은 체크 아웃을 약간 아프게 만들고이를 처리하는 일반적인 방법은 사용하는 것 svn:externals
입니다. 예를 들어, trunks
디렉토리를 추가하십시오 .
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
다음과 같은 외부 정의를 사용하십시오.
parent-pom http://host/svn/parent-pom/trunk
projectA http://host/svn/projectA/trunk
체크 아웃 trunks
하면 다음과 같은 로컬 구조 (패턴 # 2)가 발생합니다.
root/
parent-pom/
pom.xml
projectA/
선택적으로, 심지어을 추가 할 수 있습니다 pom.xml
에서 trunks
디렉토리 :
root
|-- parent-pom
| |-- branches
| |-- tags
| `-- trunk
| `-- pom.xml
|-- projectA
| |-- branches
| |-- tags
| `-- trunk
| |-- module1
| | `-- pom.xml
| |-- moduleN
| | `-- pom.xml
| `-- pom.xml
`-- trunks
`-- pom.xml
이것은 pom.xml
일종의 "가짜"폼폼입니다.이 파일은 절대 릴리스되지 않습니다.이 파일은 릴리스되지 않았기 때문에 실제 버전을 포함하지 않으며 모듈 목록 만 포함합니다. 이 파일을 사용하면 체크 아웃하면 다음 구조 (패턴 # 3)가됩니다.
root/
parent-pom/
pom.xml
projectA/
pom.xml
이 "해킹"을 통해 결제 후 루트에서 원자로 빌드를 시작하고 훨씬 편리하게 만들 수 있습니다. 실제로 이것은 대규모 빌드를 위해 maven 프로젝트와 VCS 저장소를 설정하는 방법입니다 . 작동하고 확장 가능하며 필요한 모든 유연성을 제공합니다.
대답이 아니오 (초기 질문으로 돌아 가면)라면 패턴 # 1로 살 수 있다고 생각합니다 (가장 간단한 일을 할 수 있음).
이제 보너스 질문에 대해 :
- 소스 제어, 배포 디렉토리, 공통 플러그인 등 다양한 공유 구성을 정의하는 가장 좋은 곳은 어디입니까 (부모를 가정하고 있지만 종종 물 렸으며 각 프로젝트에서 끝나지 않았습니다. 일반적인 것).
솔직히, 나는 여기서 일반적인 대답을하지 않는 방법을 모른다. 어쨌든 자식 폼은 항상 상속 된 설정을 무시할 수 있습니다.
- maven-release plugin, hudson 및 nexus는 다중 프로젝트를 설정하는 방법을 어떻게 처리합니까?
내가 사용하는 설정은 언급 할 필요가 없습니다.
실제로 maven-release-plugin이 패턴 # 1을 처리하는 방법이 궁금합니다 (특히 <parent>
릴리스시 SNAPSHOT 종속성을 가질 수 없기 때문에 섹션 을 다루는 경우 ). 이것은 닭고기 나 계란 문제처럼 들리지만 그것이 효과가 있고 테스트하기에는 너무 게으른 지 기억이 나지 않습니다.