2009-07-09 2 views
4

시나리오 다음 상상해메이븐 버전, 전복 가지와 로컬 저장소

우리는 병렬 개발의 많은 여러 SVN 지점에서 진행되고있다. 일부 프로젝트는 분기되지 않고 일부는 분기됩니다. 상호 의존성이 많이 있습니다. 또한 로컬 저장소가 있습니다 (개발자가 직접 패키지를 다운로드하지 않으므로 우리는 자체 Maven 저장소를 사용합니다).

문제는 우리가 모든 pom 파일에서 버전을 지정해야한다는 것입니다. 버전과 관련된 아티팩트는 로컬 저장소에 저장됩니다. 여러 브랜치로 작업하는 동안, 우리는 다른 브랜치의 아티팩트와 동일한 버전의 (pom 파일에서) 아티팩트를 대체합니다.

또한 pom 파일의 버전 번호를 사용하여 일부 분기 정보를 포함하는 경우 많은 분기 모듈에 의존하는 단일 분기 모듈에 문제가 발생합니다.

이 문제를 해결할 수있는 표준 해결책이나 정책이 있습니까?

각 분기에 대해 별도의 저장소를 만드는 것은 해결책이지만, 우리가 가질 수있는 분기의 수를 보면 다소 비쌉니다.

답변

6

이슈에 분류 자 ​​기능을 사용할 수 있습니까?

나는 분류자를 사용하는 것이 SOP라고 생각하지 않지만 작동해야합니다. 분류 자의 의도는 지역별 필터, JDK 버전 등을 기반으로 한 여러 가지 인공물 버전을 만드는 것이라고 생각합니다. 그러나 이것은 매우 프로젝트/환경 고유의 것으로 보이므로이 문제를 납치하는 것이 좋을 것이라고 생각합니다. . 이처럼 유물을 지정한다면

을 : 저장소에서

<artifactId>artifact-a</artifactId> 
<groupId>com.mygroup</groupId> 
<version>1.1-SNAPSHOT</version> 
<classifier>BRANCH-Q</classifier> 

당신은 얻을 것이다 :

artifact-a-1.1-SNAPSHOT-BRANCH-Q.jar 

그런 다음 당신은 바로 하나를 얻을 수있는 분류기를 사용하여 의존성의 유물을 지정할 수 있습니다 .

1

버전에 분기 이름을 추가하는 것이 올바른 방법이라고 생각합니다.

그러나 분기 된 버전에 따라 분기되지 않은 아티팩트가 발생하지 않도록해야합니다.

DEV라는 브랜치의 B 버전에 따라 A가 트렁크에 있다고 가정 해보십시오.

이 경우 나는 A가 트렁크에서 B의 릴리스 된 버전에 의존해야하며 그렇지 않으면 DEV 브랜치 자체에 있어야한다고 주장합니다. 나는이에 대한 표준 접근 방식 모르는 감각을 만들어

희망 ...

+0

당신은 맞습니다. 그러나 우리는 이미 그러한 의존성을 가지고 있으며 그러한 의존성을 제거하기위한 많은 노력이 필요합니다. 일부 모듈은 이미 분기 된 항목에 의존하므로 pom 파일의 종속성을 추적하기가 어려울 수 있습니다. – rangalo

0

. 일반적으로 버전 번호 또는 아마도 artifactID와 다른 것을 추가하여 지점을 구분하는 것이 가장 쉽습니다.

또한 번호 체계를 사용하여 분기를 구분할 수 있습니다. 예를 들어 트렁크가 버전 2.0 (다음 주요 릴리스) 인 경우 분기는 1.1 (이전 릴리스의 유지 관리 릴리스) 일 수 있습니다.

"로컬 저장소"가 무슨 뜻인지 잘 모르겠습니다. 공유 된 내부 팀/회사 저장소를 의미하는 경우 다른 브랜치에서 버전 충돌을 피하기를 원한다면 같은 이름/버전을 가진 서로 다른 아티팩트에 대해 매우 이상한 빌드 문제가 발생합니다.

개발자가 로컬 저장소에서만 분기를 작업하고 분기 저장소가 일부 공유 저장소 (예 : 일부 CI 서버를 통해)에 추가되지 않으면 일반적으로 괜찮습니다.

공유 아티팩트에 따라 분기 된 프로젝트에주의해야합니다.

C에 따라 A (트렁크)와 B (분기)가 있다고 가정합니다. B에서 변경을 지원하기 위해 C에서 변경 한 경우 A가 영향을받습니다. 이 상황에서 B 지점을 지어야하거나 매우 조심해야합니다.

관련 문제