Maven을위한 Git 저장소를 구성하는 가장 좋은 방법


19

Git에서 프로젝트를 구성하는 방법에 대한 조언이 필요합니다. 우리는 Java를 사용하고 Maven은 빌드 도구입니다. Maven kinda는 모든 프로젝트가 결국 공통 조상을 가지고 있다고 가정합니다. Maven은 Apache 재단이 프로젝트를 설정하는 방식 대로 설정되지 않은 경우 진정한 드라마 여왕이 될 수 있습니다 (릴리스 플러그인을 사용하는 사람은 아마도 내가 말하는 것을 알고있을 것입니다).

플러그인 버전과 빌드 구성 (리포지토리 구성, 생성 할 아티팩트, 명명 규칙, 플러그인 버전 등)을 제어하는 ​​최상위 부모 pom이 필요합니다. Maven은 모든 IT 프로젝트가 해당 주요 프로젝트의 하위 폴더에 있기를 원합니다. 이것은 조직을위한 하나의 거대한 Git 저장소를 의미합니다.

이것은 매우 시끄러운 환경을 만듭니다. 관련이없는 프로젝트를 수행하는 팀이 두 명인 경우 다른 팀에서 계속 합병해야합니다. 이상적으로는 프로젝트 당 하나의 저장소를 갖고 싶습니다.

그러나 하위 프로젝트가 하위 폴더가되도록 요구 하는 매우 계층적인 Maven 모델과 충돌합니다 .

사람들이이 두 모델을 어떻게 조정했는지에 대한 조언이 필요합니다 ... 감사합니다!


답변:


19

두 가지 옵션이 있습니다 :
1. git way : 하위 모듈을 사용하십시오. 다음은 git이 서브 모듈을 관리하는 방법을 설명합니다 . git submodules . 개인적으로 사용하지 않았지만 문제에 맞는 것 같습니다.
2. maven 방식으로 : maven에서는 루트 프로젝트 (구성)가 계층 적으로 모든 프로젝트의 상위 디렉토리가되어야하는 것은 아닙니다. 다음과 같은 구조를 가질 수 있습니다.

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

구성, project1 및 project2는 동일한 디렉토리 레벨에 있으며 각각은 git 저장소가 될 수 있습니다. project1 또는 project2를 빌드 할 때 project1 또는 project2 레벨에서 maven 명령을 실행하면 maven은 상위 디렉토리가 아닌 maven 저장소에서 상위 (구성)를 가져 오려고 시도합니다. 버전에주의해야합니다. project1 또는 project2에서 릴리스 버전의 부모 (구성)에 대한 참조를 유지하는 것이 좋습니다. 릴리스하려면 두 가지 단계로 구성을 해제해야합니다. 먼저 구성을 릴리스하고 프로젝트를 릴리스하십시오. Project1과 project2는 독립적으로 발전 할 수 있으며 부모와 동일한 구성 버전을 가질 필요는 없습니다.

구성 및 프로젝트를 SNAPSHOT 버전으로 사용하려는 특수한 경우를 위해 project1 또는 project2에서 <relativePath>태그 내부의 <parent>태그를 사용 하여 로컬 구성 경로를 가리킬 수 있습니다. 개발 환경에 문제가 발생할 수 있으므로 권장하지 않습니다 (적어도 Eclipse에서는 나에게)

영어로 사과드립니다.


3

Maven은 모든 IT 프로젝트가 해당 주요 프로젝트의 하위 폴더에 있기를 원합니다.

아니요, Maven은 단순히 필요한 아티팩트를 검색 할 수 있기를 원합니다. 이를 수행하는 가장 좋은 방법은 Nexus 또는 Artifactory 와 같은 아티팩트 저장소를 사용하는 것 입니다. 각 프로젝트는 자체 Git 저장소를 가질 수 있습니다.

플러그인 버전과 빌드 구성 (리포지토리 설정, 빌드 할 아티팩트 , 명명 규칙, 플러그인 버전 등) 을 제어하는 ​​최상위 부모 pom이 필요합니다.

당신의 진짜 문제가 있습니다. 부모 POM을 사용하여 구성을 적용하는 것이 합리적이지만 구성을 빌드 제어와 결합 할 이유는 없습니다. 사실, 독립형 멀티 모듈 프로젝트를 제외하고는 내가 말한 이유 (그리고 모든 프로젝트를 빌드해야한다는 사실은 매우 나쁜 아이디어라고 생각합니다. 시간).


나는 maven이 어떻게 작동하는지 친숙합니다. 그리고 저는 팀이 전체 코드베이스를 구축하는 것을 원하지 않습니다. 일반적으로 적은 수의 프로젝트를 선택하여 소스 제어에서 제외시킵니다. 완성 된 아티팩트를 호스팅 할 넥서스 서버가 있으므로 전체 코드베이스를 구축 할 이유가 없습니다. 조직이 특정 규모가되면 공유 인프라에서 실행하면 비용이 절약됩니다. 이를 위해 중앙 구성을 갖추는 것이 매번 작동하도록하는 유일한 방법입니다.
Jonathan S. Fisher

친애하는 @parsifal 자바 멀티 레이어 응용 프로그램을 만드는 것에 대한 내 질문에 주목하십시오 stackoverflow.com/questions/49562268/…
Hosein Aqajani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.