2016-10-10 2 views
1

많은 수의 매우 작은 응용 프로그램 (~ 100 Portlets)을 관리하는 소규모 팀과 협력합니다. 각 포틀릿에는 자체 git 저장소가 있습니다. 일부 코드에서 오늘 리뷰를 작성한 후 작은 편집자가 1.88-SNAPSHOT에서 1.89-SNAPSHOT으로 pom.xml 버전을 업데이트했습니다. 나는 이것이 정말로 우리가 어떻게 릴리즈를하고 싶은지를 묻는 덧붙임을 덧붙여 썼다. 그러나 나는 이것을하는 부정적인 결과를 정말로 모른다.항상 Maven 스냅 샷을 사용할 때의 결과는 무엇입니까?

왜 안되나요? 스냅 샷이 릴리즈가 아니라는 것을 알지만 왜 그렇지 않습니까? 스냅 샷 만 사용하면 어떤 결과가 발생합니까? maven이 스냅 샷을 비 스냅 샷과 동일하게 캐시하지 않을 것이므로 매번 아티팩트를 다운로드 할 수 있지만 캐싱은 중요하지 않은 것처럼 보자. 릴리스 관리 관점에서 매번 SNAPSHOT 버전을 사용하는 이유는 무엇입니까?

업데이트 : 이러한 프로젝트 각각은 팀 외부의 메이븐 저장소에서 사용할 수없는 전쟁 파일이되므로 하위 사용자가 없습니다.

+1

스냅 샷은 릴리스 버전과 비슷하지만 장점이 없습니다 ... 스냅 샷은 개발 버전으로, 언제든지 깨지거나 진화 할 수 있습니다. http://stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it을 참조하십시오. 거기에 대한 답변은이 문제를 논의하고 있습니다. – Tunaki

+0

이점은 무엇입니까? 캐싱을 제외하고? 내 질문은 개념적으로 스냅 샷이 아닙니다. 나는 의도 된 목적을 이해합니다. 제 질문은 공개 스냅 샷을 사용하지 않으면 서 실제 공개 혜택을받지 못하는 내부적으로 배포 된 전쟁에 대한 실질적인 이점은 무엇입니까? – xdhmoore

+0

SNAPSHOT은 개발 과정에서 아티팩트로 사용하기위한 것입니다. 그들은 "릴리스"버전으로 사용하기위한 것이 아닙니다. Maven을 사용하면 다소 효과적 일 수 있지만, Maven이 프로젝트에 오는 것을 알고있는 모든 개발자는 어떤 것을 이해하지 못할 것이며 그다지 좋지 않습니다. – Tunaki

답변

2

이 작업을 원하지 않는 주된 이유는 전체 Maven 환경 시스템이 스냅 샷 버전의 특정 정의에 의존하기 때문입니다. 그리고이 정의는 당신의 질문에서 설정하는 것이 아닙니다. 그것은 현재 활발히 개발되고있는 버전만을 나타 내기로되어 있고, 안정 버전이라고 생각하지 않습니다. maven-release-plugin 당신이 릴리스 버전으로 스냅 샷 버전으로 출시를 준비 못하게

  1. : 결과는 Maven을 중심으로 구축 도구의 많은 기본적으로이 정의를 가정한다는 것이다. 따라서 버전 컨트롤에서 직접 태그를 지정하거나 스크립트를 직접 작성해야합니다. 즉, 해당 라이브러리 사용자가이 플러그인을 기본 구성으로 사용할 수 없으므로 allowTimestampedSnapshots을 설정해야합니다.
  2. 최신 릴리스 버전으로 자동 업데이트하는 데 사용할 수있는 versions-maven-plugin도 제대로 작동하지 않으므로 사용자가 구성 문제없이 사용할 수 없습니다.
  3. Artifactory 또는 Nexus와 같은 저장소 관리자에는 스냅 숏 종속성 및 릴리스 종속성을 호스팅하는 저장소가 명확하게 구분되어 제공됩니다. 예를 들어 회사 전체에 공유 된 Nexus를 사용하는 경우 to purge old snapshots으로 구성 할 수 있습니다. 이렇게하면 다음과 같은 상황이 발생할 수 있습니다 ... 누군가 1.88-SNAPSHOT에 따라 다르며 완전히 제거되었다고 가정합니다. 시간을두고 다시 배포해야합니다. , 다음 제거까지 ... 또한 특정 Artifactory 내부 저장소는 어떤 스냅 샷으로도 구성 될 수 있으므로 해당 위치에 배포 할 수 없습니다. 사용자는 스냅 샷을 허용하는 저장소를 가리 키도록 더 많은 저장소 구성을 추가해야합니다 (저장소 구성을 원하지 않을 수 있음).
  4. Maven은 모든 Maven 프로젝트가 동일한 의미 (디렉토리 레이아웃, 버전 관리 ...)를 공유하려고 시도해야한다는 것을 의미합니다. 프로젝트에 액세스하는 새 개발자는 혼란스러워하고 프로젝트가 어떻게 구축되는지 이해하려고 노력할 시간을 잃을 것입니다.

결국이 작업을 수행하면 사용자에게 더 많은 고통을 초래할뿐 아니라 단 하나의 작업도 간소화됩니다. 아마, 당신은 약간의 일을 할 수는 있지만, (회사 정책이나 다른 미래의 변화로 인해) 어떤 일이 깨어 질 때 놀라지 않을 것 ...

0

Tunaki는 메이븐 베스트 프랙티스를 깨뜨리고, 나는 그 견해를 전적으로지지한다.당신이 "다른 회사의 규칙"에 대해 걱정하지 않아도하지만, 이유가 있습니다 :

  1. 것은 당신이 CI를 수행하지 않는 경우 (모든 잠재적 릴리스로 구축 고려), 당신이 버전을 구별해야하는 생산성을 높이고 테스트를 위해 만나는 사람들. 모든 것이 SNAPSHOT 인 경우 이것은 어렵습니다.

  2. 누군가 (실수로) 두 번째 1.88-SNAPSHOT을 배포하면 새 1.88-SNAPSHOT이되고 이전의 것을 숨기고 (콘크리트 타임 스탬프로 사용할 수 있지만 지저분합니다). 릴리스 버전은 두 번 배포 할 수 없습니다.

관련 문제