maven snapshot(https://stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it/5901460,
스냅 샷이란 무엇입니까?
SNAPSHOT은 현재 개발 사본을 나타내는 특수 버전입니다. 일반 버전과 달리 Maven은 모든 빌드에 대해 원격 저장소에서 새 SNAPSHOT 버전을 확인합니다.
이제 데이터 서비스 팀은 저장소에 매번 업데이트 된 코드의 SNAPSHOT을 릴리스합니다 (예 : data-service : 1.0-SNAPSHOT). 이전 SNAPSHOT jar을 대체합니다.
Maven Snapshot은 정확히 무엇이며 왜 필요합니까?
물어보다물었다 8 년, 6 개월 전활성 1 개월 전조회 294k 번
783256
나는 Maven Snapshot의 의미에 대해 약간 혼란스럽고 왜 우리가 그것을 만들었습니까?자바메이븐의존성 관리공유는이 질문을 향상생성 18 dec.요아킴 사우어249k5050 골드 배지497497 은색 배지569569 청동 배지생성 5 may 5 ‘112012-06-05 16:54메이 삼4,22455 골드 배지13개의 은색 배지1414 청동 배지코멘트를 추가하다
답변 12 개
Maven의 스냅 샷 버전은 아직 출시되지 않은 버전입니다.
아이디어는 것입니다 전에1.0
릴리스 (또는 다른 버전)을 수행하는 존재 1.0-SNAPSHOT
. 그 버전이 될 수 있습니다 1.0
. 기본적으로 ” 1.0
개발 중”입니다. 이것은 실제 릴리스에 가깝1.0
거나 아주 먼 곳일 수 있습니다 ( 0.9
예 : 릴리스 직후 ).
“실제”버전과 스냅 샷 버전의 차이점은 스냅 샷에 업데이트가있을 수 있다는 것입니다. 즉, 1.0-SNAPSHOT
오늘 다운로드하면 어제 나 내일 다운로드하는 것과 다른 파일이 제공 될 수 있습니다.
일반적으로 스냅 샷 종속성은 개발 중에 만 존재 해야 하며 릴리스 된 버전이 없어야합니다 (즉, 스냅 샷이 아닌 스냅 샷 없음).공유는이 답변을 향상생성 18 feb. 142014-02-18 9:00:08크리스 데보717금 배지2개10은 배지 10 개1717 청동 배지생성 5 may 5 ‘112011-57-16요아킴 사우어249k5050 골드 배지497497 은색 배지569569 청동 배지
- 58@ amphibient : 아니요. 스냅 샷이 더 안정적 일 필요 는 없습니다 . 최신 빌드 일뿐입니다. 스냅 샷 은 실제 릴리스 보다 우선 하며 그 이후에는 나오지 않습니다. 실제로 버전 번호는 일반적으로 분기를 나타내지 않습니다. – avandeursen Mar 23 ’14에서 21:05
- 6@avandeursen 스냅 샷은 반드시 당신이 주장하는 의미를 가질 필요는 없습니다. “master-SNAPSHOT”을 갖고 1.0 릴리스를 만들 수 있습니다. “FutureVersion-SNAPSHOT”일 필요는 없으며 반드시 릴리스 이전 일 필요는 없습니다. 그러나 다른 모든 것은 옳습니다-움직이는 대상에 대한 불안정한 참조이며 반복 가능한 빌드를 만들 수 없습니다. – Scott Carey 5 월 7 일 15시 23 분 18 초
- 2감사합니다 @ScottCarey. “이동 대상”이 결국 존재한다는 보장조차 없기 때문에 “일반적으로 선행”은 아마도 더 정확할 것입니다. – avandeursen 5 월 8 일 15시 7:59
- 1@Jay : 아니요, 특정 SNAPSHOT을 명시 적으로 참조하는 방법이 없다는 것을 알기 만하면 설계 상 주소 지정 / 교환이 불가능합니다. 세분화 된 버전 관리가 필요한 경우 특정 버전 문자열 (-RC1, -RC2 또는 이와 유사한 것)을 사용하여 릴리스 후보를 릴리스해야합니다. – Joachim Sauer 10 월 11 일 17시 10 분 12 초
- 4왜 그냥 ”
1.0-DEVELOPMENT
“또는 ”1.0-INPROGRESS
” 처럼 전화를 걸 수 없습니까? 사람들이 명백하지 않은 용어를 사용해야하는 이유 – uh_big_mike_boi 8 월 14 일 0:59
752
다른 세 가지 답변은 -SNAPSHOT
버전이 무엇인지에 대한 좋은 비전을 제공합니다 . Maven이 SNAPSHOT
의존성을 발견했을 때의 동작에 관한 정보를 추가하고 싶었습니다 .
애플리케이션을 빌드 할 때 Maven은 로컬 저장소 에서 종속성을 검색 합니다. 안정적인 버전이 없으면 원격 저장소 ( settings.xml
또는에 정의 됨 pom.xml
)를 검색하여이 종속성을 검색합니다. 그런 다음이 파일을 로컬 저장소에 복사하여 다음 빌드에서 사용할 수 있도록합니다.
예를 들어 foo-1.0.jar
라이브러리는 안정적인 버전 으로 간주되며 Maven이 로컬 저장소에서 라이브러리를 찾으면 현재 빌드에이 라이브러리 를 사용합니다.
이제 foo-1.0-SNAPSHOT.jar
라이브러리 가 필요한 경우 Maven은이 버전이 안정적이지 않으며 변경 될 수 있음을 알게됩니다. 그렇기 때문에 Maven은이 라이브러리의 버전이 로컬 리포지토리에있는 경우에도 원격 리포지토리에서 최신 버전을 찾으려고 시도합니다. 그러나이 점검은 하루에 한 번만 수행됩니다. 즉 foo-1.0-20110506.110000-1.jar
, 로컬 저장소에 (예 :이 라이브러리가 2011/05/06에 11:00:00에 생성 된 경우) Maven 빌드를 같은 날 다시 실행하면 Maven 이 저장소를 확인 하지 않습니다. 최신 버전입니다.
Maven은 리포지토리 정의에서이 업데이트 정책을 변경하는 방법을 제공합니다.
<repository>
<id>foo-repository</id>
<url>...</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>XXX</updatePolicy>
</snapshots>
</repository>
어디 XXX
있을 수 있습니다 :
- always : Maven은 모든 빌드에서 최신 버전을 확인합니다.
- 매일 기본값입니다.
- interval : XXX : 분 간격 (XXX)
- never : Maven은 다른 버전을 검색하지 않습니다. 로컬에 존재하지 않는 경우에만 그렇게 할 것입니다. 구성을 사용하면
SNAPSHOT
버전이 안정적인 라이브러리로 처리됩니다.
(settings.xml의 모델은 여기 에서 찾을 수 있습니다)공유는이 답변을 향상편집 9 월 4 일 9:12에 수정예반5,65299 골드 배지4141 실버 배지5858 청동 배지생성 6 may. 112011-06-06 6:41:52로메인 린 솔라62.7k4343 골드 배지189189 은색 배지259259 청동 배지
- 2받는다는 다시 다운로드 모든 강제로 명령 줄 스위치를 사용할 수 있습니다 같다
SNAPSHOT
: 버전mvn clean package -U
에 따라 받는다는 튜토리얼 – 드미트리 K 3월 25일 ’14 14시 38분에서 - 삼
-U
깃발 조심해 . MNG-4142 로 인해 예상대로 작동하지 않을 수 있습니다 . – Kevin Cross 5 월 5 일 14시 18:16 - 삼또한 모범 사례에서는 릴리스 버전을 만들 때 스냅 샷 종속성을 사용하지 않아도되며 스냅 샷 종속성이있는 경우 Maven Release Plugin이 실패합니다. – RCross Jul 7 ’14에 8:29
- 2
mvn install
로컬 저장소에 1.0-SNAPSHOT 버전의 jar 파일을 설치하기 위해 실행 했습니다. 다음날 나는 프로젝트를 변경했지만 버전mvn install
을 변경하지 않았습니다. 예상되는 동작입니까? 버전mvn install
을 변경 한 후 재사용하여 버전을 덮어 쓸 수 없습니까? – Don Cheadle 11 월 26 일 14시 16:56 - 1@mmcrae AFAIK 업데이트해야합니다. 그게 문제 설치 로컬 스냅 샷의 항아리를 업데이트 할 목표를. 다른 것을 발견하셨습니까? – Johnny Oct 27 ’16시 7:30
“SNAPSHOT”용어는 빌드가 주어진 시간에 코드의 스냅 샷임을 의미합니다.
일반적으로이 버전은 아직 개발 중입니다.
코드가 준비되고 릴리스 될 때가되면 POM에 나열된 버전을 변경해야합니다. 그런 다음 “SNAPSHOT”대신 “1.0”과 같은 레이블을 사용합니다.
버전 관리에 대한 도움이 필요하면 시맨틱 버전 관리 사양을 확인하십시오 .공유는이 답변을 향상생성 05 nov.스페인 사람5177 청동 배지생성 5 may 5 ‘112012-06-05 16:55:54jjnguy112k4646 금 배지273273은색 배지314314 청동 배지
- 시맨틱 버전 관리 측면 에서, -SNAPSHOT 릴리스는 시험판 일 것 입니다. – 알파, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92. ” – avandeursen 21시 15분에서 3월 23일 ’14
- 삼”SNAPSHOT”은 “특정 시간에 코드 스냅 샷”이 아니라 “사용 가능한 최신 코드 빌드”인 것 같습니다. 이것이 HTTP 인 경우, “HEAD를하는 것을 귀찮게하지 말고, 서버에있는 모든 것을 가져 가십시오.”라는 플래그 일 것입니다. 실제로, 그것은 “주어진 코드”와 거의 반대입니다. – lilbyrdie 5 월 21 일 15시 14:52
“릴리스”는 변경되지 않은 버전의 최종 빌드입니다.
“스냅 샷”은 동일한 이름을 가진 다른 빌드로 대체 될 수있는 빌드입니다. 빌드가 언제든지 변경 될 수 있으며 여전히 개발 중임을 의미합니다.
동일한 코드를 기반으로 다른 빌드에 대해 다른 아티팩트가 있습니다. 예를 들어 디버깅이 있거나없는 것이있을 수 있습니다. 하나는 Java 5.0 용이고 다른 하나는 Java 6 용입니다. 일반적으로 필요한 모든 것을 수행하는 하나의 빌드를 갖는 것이 더 간단합니다. 😉공유는이 답변을 향상생성 12 apr. 4 월 12 일 13:41DanAl5673세 실버 배지1717 청동 배지생성 5 may 5 ‘112017-05-54 : 54피터로 레이463k6565 골드 배지621621은 배지10081008 청동 배지코멘트를 추가하다18
Maven 버전에는 프로젝트가 현재 개발 중임을 나타내는 문자열 리터럴 “SNAPSHOT”이 포함될 수 있습니다.
예를 들어 프로젝트의 버전이 “1.0-SNAPSHOT”이고이 프로젝트의 아티팩트를 Maven 저장소에 배치하는 경우 Maven은 11에 릴리스를 배치하는 경우이 버전을 “1.0-20080207-230803-1″로 확장합니다 : 2008 년 2 월 7 일 UTC 오후 08시. 다시 말해, 스냅 샷을 배포 할 때 소프트웨어 구성 요소를 릴리스하지 않습니다. 특정 시간에 구성 요소의 스냅 샷을 공개합니다.
따라서 주로 스냅 샷 버전은 개발중인 프로젝트에 사용됩니다. 프로젝트가 현재 개발중인 소프트웨어 구성 요소에 의존하는 경우 스냅 샷 릴리스에 의존 할 수 있으며 Maven은 빌드를 실행할 때 저장소에서 최신 스냅 샷을 주기적으로 다운로드하려고 시도합니다. 마찬가지로, 시스템의 다음 릴리스 버전이 “1.8”이면 프로젝트는 공식적으로 릴리스 될 때까지 “1.8-SNAPSHOT”버전이됩니다.
예를 들어, 다음 종속성은 항상 최신 1.8 개발 JAR 스프링을 다운로드합니다.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>1.8-SNAPSHOT”</version>
</dependency>
메이븐 릴리스 프로세스의 예

공유는이 답변을 향상생성 13 jul.생성 13 jul.Joby Wilson Mathews4,82211 골드 배지3232 실버 배지3333 청동 배지코멘트를 추가하다6
용어에 대해 지적하고 싶습니다. 다른 답변은 Maven과 관련하여 “스냅 샷”버전이 무엇인지에 대한 좋은 설명을 제공했습니다. 그러나 스냅 샷이 아닌 버전을 “릴리스”버전이라고해야합니까?
같은 규정이없는 모든 버전 것 같다 것 “릴리스”버전의 의미 버전 아이디어, 사이에 긴장이 -SNAPSHOT
규정 등이없는도하지만 -beta.4
, 그리고 “release”버전에 대한 Maven의 아이디어 아이디어는 -SNAPSHOT
.
즉, “릴리스”가 “Maven Central에 릴리스 할 수 있음”또는 “소프트웨어가 최종 릴리스에 공개됨”을 의미하는지에 대한 의미가 모호합니다. -beta.4
공개 버전으로 출시하면 “릴리스”버전으로 간주 될 수 있지만 “최종 릴리스”는 아닙니다. 시맨틱 버전 관리-beta.4
는 “시험판”버전 과 같은 것이 있다고 명시 되어 있기 때문에이 버전이 없어도 “릴리스”버전이라고하는 것은 의미가 없습니다 -SNAPSHOT
. 실제로 정의에 따르면 테스트를 위해 공개 액세스를 허용하더라도 실제 릴리스가 아닌 -rc.5
릴리스 후보 이기도합니다.
따라서 Maven에도 불구하고 필자의 의견으로는 한정자가 전혀없는 “릴리스”버전을 호출하는 것만으로는 더 적절합니다 -beta.4
. 아마도 Maven non-snapshot 버전의 더 나은 이름은 “안정된”버전 일 것입니다 ( 다른 답변에서 영감을 얻음 ). 따라서 우리는 :
1.2.3-beta.4-SNAPSHOT
: 시험판 버전의 스냅 샷 버전.1.2.3-SNAPSHOT
: 릴리스 버전의 스냅 샷 버전입니다.1.2.3-beta.4
: 시험판 버전의 안정적인 버전입니다.1.2.3
: 릴리스 버전 (안정적이고 스냅 샷이 아닌 버전 임).
공유는이 답변을 향상생성 19 dec.가렛 윌슨6,7931414 골드 배지8383은 배지177177 청동 배지
- maven이 빌드 메타 데이터 또는 시험판 명명 규칙을 처리하는 방법에 대한 정보가 있습니까? 우리 모두 알파가 베타보다 앞서는 것을 알고 있지만 메이븐은 알고 있습니까? 안정적인 릴리스로 1.2.3-beta.4를 사용하더라도 적어도 1.2.3이 이후에 있다는 것을 알고 있습니까? – DGoiko 2 일 전
이것이 저장소의 스냅 샷 모양이며이 경우에는 활성화되지 않습니다. 즉, 여기에 언급 된 저장소가 안정적이며 업데이트가 필요하지 않습니다.
<project>
...
<repositories>
<repository>
<id>lds-main</id>
<name>LDS Main Repo</name>
<url>http://code.lds.org/nexus/content/groups/main-repo</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
또 다른 경우는 다음과 같습니다.
<snapshots>
<enabled>true</enabled>
</snapshots>
이것은 Maven이이 저장소에 대한 업데이트를 찾을 것임을 의미합니다. 태그를 사용하여 업데이트 간격을 지정할 수도 있습니다.공유는이 답변을 향상생성 2 dec.카티 홀 라즈3603세 실버 배지88 청동 배지코멘트를 추가하다5
일반적으로 maven에는 두 가지 유형의 빌드가 있습니다. 1) 스냅 샷 빌드 2) 릴리스 빌드
- 스냅 샷 빌드 : SNAPSHOT은 일반 버전과 다른 현재 배포 사본을 나타내는 특수 버전이며, maven은 원격 저장소의 모든 빌드 버전을 확인하여 스냅 샷 빌드는 개발 빌드에 지나지 않습니다.
- 릴리스 빌드 : 릴리스는 빌드 버전에서 SNAPSHOT을 제거하는 것을 의미하며, 이는 일반 빌드 버전입니다.
공유는이 답변을 향상편집 9 월 9 일 12:30에 수정생성 8 aug. 142014-08-08 07:14:54벤키 붕가 라라82177 은색 배지55 청동 배지코멘트를 추가하다2
단순히 스냅 샷은 안정적이지 않은 버전임을 의미합니다.
버전에 1.0.0과 같은 스냅 샷이 포함 된 경우 -SNAPSHOT는 안정적인 버전이 아니며 종속성을 해결하기 위해 원격 저장소를 찾습니다.공유는이 답변을 향상17:10 에 5 월 4 일 에 답변 함샤니카 프라 산기 카34청동 배지3개코멘트를 추가하다1
SDLC의 컨텍스트를 이해하면 스냅 샷과 릴리스의 차이점을 이해하는 데 도움이됩니다. 개발 프로세스 동안 개발자는 모두 자신의 기능을 기본 분기에 제공합니다. 어느 시점에서 리드는 충분한 기능이 누적되었다고 생각하고 기준 분기에서 릴리스 분기를 잘라냅니다. 이 시점 이전의 모든 빌드는 스냅 샷입니다. 이 시점까지의 빌드는 릴리스입니다. 릴리스 테스트 중에 결함이 발견되면 릴리스 빌드도 프로덕션으로 이동하기 전에 변경 될 수 있습니다.공유는이 답변을 향상2 월 27 일에 0:30 에 답변 됨CCNA941일 실버 배지청동 배지10개10개코멘트를 추가하다1
Snapshot은 구성에 따라 의미합니다. Maven은 특별한 종속성에 대한 최신 변경 사항을 확인합니다. 스냅 샷은 개발 중이기 때문에 불안정하지만 특수 프로젝트에서 최신 변경이 필요한 경우 종속성 버전을 스냅 샷 버전으로 구성해야합니다. 이 시나리오는 여러 제품이있는 대기업에서 이러한 제품이 서로 밀접하게 관련되어 있습니다.공유는이 답변을 향상7 월 6 일 에 7 월 6 일 에 답변 함마흐디 솔 타니11청동 배지2개코멘트를 추가하다1
스냅 샷은 작업중인 프로젝트의 현재 개발 사본을 나타내는 특수 버전입니다. 각 빌드마다 maven은 항상 프로젝트의 SNAPSHOT을 확인합니다.
maven은 프로젝트의 최신 SNAPSHOT을 찾을 때마다 로컬 저장소에서 프로젝트의 이전 .jar 파일을 다운로드하고 바꿉니다.
스냅 샷 버전은 항상 프로젝트에서 일부 업데이트 / 변경이 이루어집니다. 또한 Snapshot은 개발 단계 중에 만 존재해야하며 릴리스 버전이 없습니다. 이는 프로젝트 빌드가 언제든지 변경 될 것이며 여전히 개발 프로세스에 있음을 의미합니다.
애플리케이션을 빌드 할 때 Maven은 로컬 저장소에서 종속성을 검색합니다. 안정된 버전이 없으면 원격 저장소 (pom.xml에 정의 됨)를 검색하여이 종속성을 검색합니다. 그런 다음이 파일을 로컬 저장소에 복사하여 다음 빌드에서 사용할 수 있도록합니다.
tilt, docker, run on jenkins without the test
maven으로 빌드시 정상적으로 동작하지 않는 test케이스들로 인해 실패하는 경우가 많다.
테스트케이스를 작성한지 오래됬거나 변경된 정보들로 인해 성공못하는 경우가 빈번하다.
물론 가장 좋은 케이스는 테스트케이스들도 같이 꾸준히 관리를 해주는 것이지만
그게 쉬운일이던가???….
무튼 이런 경우 보통 jenkins 등 ci 툴에서도 빌드시 skip test 명령어를 명시적으로 넣어주곤 한다.
방법은 세 가지다.
첫 번째, 메이븐 빌드 실행 커맨드 라인에 다음과 같이 실행
package -Dmaven.test.skip=true
두 번째, 메이븐 빌드 실행 커맨드 라인에 다음과 같이 실행
package -DskipTests
세 번째, 커맨드 라인에 명령어를 명시적으로 주어서 사용하고 싶지 않은 경우 (pom.xml plugin 추가)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
위와 같이 세 가지 방법으로 사용할 수 있고 나의 경우는 두 번째 방법을 스프링 부트내에서 자주 사용해 packing하곤 한다.