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 개

활성오래된투표936

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 청동 배지

보여  더 의견을

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있을 수 있습니다 :

(settings.xml의 모델은 여기 에서 찾을 수 있습니다)공유는이 답변을 향상편집 9 월 4 일 9:12에 수정예반5,65299 골드 배지4141 실버 배지5858 청동 배지생성 6 may. 112011-06-06 6:41:52로메인 린 솔라62.7k4343 골드 배지189189 은색 배지259259 청동 배지

코멘트를 추가하다64

“SNAPSHOT”용어는 빌드가 주어진 시간에 코드의 스냅 샷임을 의미합니다.

일반적으로이 버전은 아직 개발 중입니다.

코드가 준비되고 릴리스 될 때가되면 POM에 나열된 버전을 변경해야합니다. 그런 다음 “SNAPSHOT”대신 “1.0”과 같은 레이블을 사용합니다.

버전 관리에 대한 도움이 필요하면 시맨틱 버전 관리 사양을 확인하십시오 .공유는이 답변을 향상생성 05 nov.스페인 사람5177 청동 배지생성 5 may 5 ‘112012-06-05 16:55:54jjnguy112k4646 금 배지273273은색 배지314314 청동 배지

코멘트를 추가하다25

“릴리스”는 변경되지 않은 버전의 최종 빌드입니다.

“스냅 샷”은 동일한 이름을 가진 다른 빌드로 대체 될 수있는 빌드입니다. 빌드가 언제든지 변경 될 수 있으며 여전히 개발 중임을 의미합니다.

동일한 코드를 기반으로 다른 빌드에 대해 다른 아티팩트가 있습니다. 예를 들어 디버깅이 있거나없는 것이있을 수 있습니다. 하나는 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 버전의 더 나은 이름은 “안정된”버전 일 것입니다 ( 다른 답변에서 영감을 얻음 ). 따라서 우리는 :

공유는이 답변을 향상생성 19 dec.가렛 윌슨6,7931414 골드 배지8383은 배지177177 청동 배지

코멘트를 추가하다5

이것이 저장소의 스냅 샷 모양이며이 경우에는 활성화되지 않습니다. 즉, 여기에 언급 된 저장소가 안정적이며 업데이트가 필요하지 않습니다.

<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) 릴리스 빌드

  1. 스냅 샷 빌드 : SNAPSHOT은 일반 버전과 다른 현재 배포 사본을 나타내는 특수 버전이며, maven은 원격 저장소의 모든 빌드 버전을 확인하여 스냅 샷 빌드는 개발 빌드에 지나지 않습니다.
  2. 릴리스 빌드 : 릴리스는 빌드 버전에서 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하곤 한다.

0