programing

Maven 스냅샷이란 정확히 무엇이며 왜 필요한가?

coolbiz 2022. 7. 8. 22:18
반응형

Maven 스냅샷이란 정확히 무엇이며 왜 필요한가?

Maven Snapshot의 의미와 왜 Maven Snapshot을 구축해야 하는지 잘 모르겠습니다.

Maven의 스냅샷 버전은 출시되지 않았습니다.

생각은...1.0 다른 릴리스실행되면 "Release"(또는 다른 )가 합니다.1.0-SNAPSHOT이 버전은 앞으로 일어날있는 것입니다. 1.0기본적으로는 "1.0개발중입니다.이건 진짜에 가까울지도 몰라1.0 꽤(「」의 직후)0.9예를 들어, 릴리스 합니다).

"실제" 버전과 스냅샷 버전의 차이점은 스냅샷이 업데이트를 받을 수 있다는 것입니다., ,, 운, 운, 운, 운, 운, that를 다운받으면1.0-SNAPSHOT오늘은 어제나 내일 다운로드하는 것과 다른 파일을 줄 수 있습니다.

일반적으로 스냅샷의 의존성은 개발 중에만 존재해야 하며 릴리스된 버전(즉, 스냅샷이 아닌 버전)은 스냅샷 버전에 의존하지 않아야 합니다.

외 은 '어느 쪽인가'라는 해 줍니다.-SNAPSHOT버전은 입니다.이 Maven을 때 Maven의 .SNAPSHOT★★★★★★ 。

애플리케이션을 빌드하면 Maven은 로컬저장소에서 의존관계를 검색합니다.안정된 버전이 발견되지 않으면 리모트저장소가 검색됩니다(에서 정의).settings.xml ★★★★★★★★★★★★★★★★★」pom.xml하여 이 를 취득합니다를 사용하여 이 의존관계를 가져옵니다.그런 다음 로컬 저장소에 복사하여 다음 빌드에서 사용할 수 있도록 합니다.

를 들면, 「」라고 하는 은,foo-1.0.jar라이브러리는 안정된 버전으로 간주되며, Maven이 로컬 저장소에서 라이브러리를 발견하면 현재 빌드에 이 라이브러리를 사용합니다.

그럼 제가 하시면 만이 필요하시면 만foo-1.0-SNAPSHOT.jarMaven은 이 버전이 안정적이지 않고 변경될 수 있다는 것을 알게 될 것입니다.그렇기 때문에 Maven은 이 라이브러리의 버전이 로컬저장소에서 발견되더라도 리모트저장소에서 새로운 버전을 찾으려고 합니다. 이 한 .그 말은, 만약 당신이 이 모든 것을foo-1.0-20110506.110000-1.jar(즉, 이 라이브러리는 2011/05/06 11:00에 로컬 저장소에서 생성되었으며, 같은 날 Maven 빌드를 다시 실행해도 Maven은 저장소에서 최신 버전을 확인하지 않습니다.

Maven은 저장소 정의에서 이 업데이트 정책을 변경할 수 있는 방법을 제공합니다.

<repository>
    <id>foo-repository</id>
    <url>...</url>
    <snapshots>
        <enabled>true</enabled>
        <updatePolicy>XXX</updatePolicy>
    </snapshots>
</repository>

서 ''는XXX하다

  • 항상: Maven은 모든 빌드에서 새로운 버전을 확인합니다.
  • daily 기본값
  • 간격:XXX: 분 단위 간격(XXX)
  • never: Maven은 다른 버전을 취득하려고 하지 않습니다.그것은 그것이 로컬에 존재하지 않는 경우에만 그렇게 할 것이다.설정을 사용하면,SNAPSHOT버전은 안정적인 라이브러리로 처리됩니다.

(여기서 settings.xml 모델을 찾을 수 있습니다.)

「SNAPSHOT」라는 용어는, 빌드가 특정의 시점에서 코드의 스냅샷인 것을 의미합니다.

이는 보통 이 버전이 아직 개발 중임을 의미합니다.

코드가 준비되고 릴리스가 되면 POM에 기재되어 있는 버전을 변경할 필요가 있습니다."SNAPSHOT" 대신 "1.0"과 같은 라벨을 사용합니다.

버전 관리에 대한 도움말은 시멘틱 버전 지정 사양을 참조하십시오.

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

"스냅샷"은 같은 이름의 다른 빌드로 대체할 수 있는 빌드입니다.이는 빌드가 언제든지 변경될 수 있으며 아직 개발 중임을 의미합니다.

동일한 코드를 기반으로 빌드마다 다른 아티팩트가 있습니다.예를 들어 디버깅이 있는 것과 없는 것이 있을 수 있습니다.하나는 Java 5.0용, 다른 하나는 Java 6용.일반적으로 필요한 기능을 모두 갖춘 하나의 빌드를 갖는 것이 더 간단합니다.;)

Maven 버전은 프로젝트가 현재 진행 중임을 나타내는 문자열 리터럴 "SNAPSHOT"를 포함할 수 있습니다.

예를 들어 프로젝트에 "1.0-SNAPSHOT" 버전이 있고 이 프로젝트의 아티팩트를 Maven 저장소에 배포하는 경우 2008년 2월 7일 오후 11시 8분에 릴리스를 배포하는 경우 Maven은 이 버전을 "1.0-200807-230803-1"로 확장합니다.즉, 스냅샷을 배포할 때 소프트웨어 구성 요소의 릴리스를 만드는 것이 아니라 특정 시간에 구성 요소의 스냅샷을 릴리스하는 것입니다.

따라서 스냅샷 버전은 주로 현재 개발 중인 프로젝트에 사용됩니다.프로젝트가 현재 개발 중인 소프트웨어 컴포넌트에 의존하고 있는 경우 스냅샷 릴리스를 사용할 수 있습니다.Maven은 빌드를 실행할 때 정기적으로 저장소에서 최신 스냅샷을 다운로드하려고 시도합니다.마찬가지로 시스템의 다음 릴리스가 버전 "1.8"이 될 경우 프로젝트는 정식 릴리스될 때까지 "1.8-SNAPSHOT" 버전이 됩니다.

예를 들어, 다음 의존관계는 항상 봄의 최신 1.8 개발 JAR을 다운로드합니다.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>1.8-SNAPSHOT”</version>
    </dependency>

메이븐

메이븐 릴리스 프로세스의 예

enter image description here

용어에 대해 강조하고 싶습니다.다른 답변들은 Maven의 맥락에서 "스냅샷" 버전이 무엇인지에 대한 좋은 설명을 해주었다.그러나 스냅샷 이외의 버전을 "릴리스" 버전이라고 부를 필요가 있습니까?

release" 버전 . "release" 은 "release"와으로 보입니다.-SNAPSHOT요.-beta.4그리고 Maven의 "릴리스" 버전에 대한 아이디어는 단지 부재를 포함하고 있는 것 같습니다.-SNAPSHOT.

즉, "release"가 "Maven Central에 출시할 수 있다" 또는 "소프트웨어가 일반에 최종 출시되어 있다"는 의미적 모호성이 있습니다.우리는 고려할 수 있다-beta.4공개하면 '발매'가 되는 건데 '최종 공개'는 아니에요.시멘틱 버전 관리에는 다음과 같은 것이 분명히 나와 있습니다.-beta.4'프리 릴리즈' 버전이기 때문에 '릴리스' 버전이라고 하는 것은 의미가 없습니다.-SNAPSHOT사실, 정의상으로는-rc.5는 실제 릴리즈가 아닌 릴리즈 후보입니다.다만, 테스트를 위해서 퍼블릭접근을 허가할 수 있습니다.

그래서 Maven은 내 생각에 수식자가 전혀 없고 심지어 수식자도 없는 "release" 버전만 부르는 것이 더 적절할 것 같다.-beta.4Maven 비스냅샷 버전의 더 좋은 이름은 (다른 답변에서 영감을 얻은) "안정적인" 버전일 것입니다.다음과 같이 됩니다.

  • 1.2.3-beta.4-SNAPSHOT: 프리리스 버전의 스냅샷 버전.
  • 1.2.3-SNAPSHOT: 릴리즈 버전의 스냅샷 버전.
  • 1.2.3-beta.4: 프리리스 버전의 안정판.
  • 1.2.3: 릴리즈 버전(확실히 안정적이고 스냅샷이 없는 버전)

스냅샷 종속성 스냅샷 종속성은 개발 중인 종속성(JAR 파일)입니다.버전 번호를 지속적으로 업데이트하여 최신 버전을 얻는 대신 프로젝트의 스냅샷 버전을 사용할 수 있습니다.일치하는 스냅샷 버전이 이미 로컬 저장소에 있는 경우에도 모든 빌드에 대해 스냅샷 버전이 항상 로컬 저장소에 다운로드됩니다.스냅샷 종속성을 항상 다운로드하면 모든 빌드에 대해 로컬 저장소에 항상 최신 버전이 유지됩니다.

pom에는 많은 -SNAPSHOT 의존관계가 포함되어 있으며 이러한 -SNAPSHOT 의존관계는 이동 타깃입니다.

enter image description here

https://dzone.com/articles/maven-release-plugin-in-the-enterprise https://javarevisited.blogspot.com/2019/03/top-5-course-to-learn-apache-maven-for.html https://www.mojohaus.org/versions-maven-plugin/examples/lock-snapshots.html http://tutorials.jenkov.com/maven/maven-tutorial.html

일반적으로는 두 가지 유형의 빌드가 있습니다 1)스냅샷 빌드 2) 릴리즈 빌드

  1. 스냅샷 빌드:스냅샷은 현재 배포 복사본을 나타내는 특별한 버전입니다. 일반 버전과 달리 메이븐은 원격 저장소의 모든 빌드에 대해 버전을 검사하므로 스냅샷 빌드는 개발 빌드일 뿐입니다.

  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은 이 저장소의 업데이트를 찾습니다.태그로 업데이트 간격을 지정할 수도 있습니다.

단순히 스냅샷은 버전이 안정적이지 않다는 것을 의미합니다.

버전에 1.0.0과 같은 스냅샷이 포함되어 있는 경우 - SNAPSHOT은 버전이 안정적이지 않음을 의미하며 종속성을 해결하기 위해 원격 저장소를 찾습니다.

스냅샷은 단순히 구성에 따라 Maven이 특별한 의존관계에 따라 최신 변경 사항을 확인하는 것을 의미합니다.스냅샷은 개발 중이므로 불안정하지만 특수 프로젝트에서 최신 변경 사항이 필요한 경우 종속 버전을 스냅샷 버전으로 구성해야 합니다.이 시나리오는 여러 제품이 서로 밀접하게 관련되어 있는 대규모 조직에서 발생합니다.

Maven Snapshot은 Maven 빌드에 의해 생성된 아티팩트이며 소프트웨어 개발 주기에서 개발자를 돕는 척합니다.스냅샷은 아무 곳에서나 사용되는 것처럼 가장하지 않는 아티팩트(또는 프로젝트 빌드 결과)입니다. 빌드 프로세스를 테스트하거나 아직 프로덕션 환경으로 이행할 준비가 되지 않은 새로운 요건을 테스트하기 위해 일시적으로 작성된 .jar, ear, ...일 뿐입니다.스냅샷 아티팩트 품질이 만족스러우면 다른 프로젝트에서 사용하거나 자체적으로 배포할 수 있는 릴리스 아티팩트를 생성할 수 있습니다.

프로젝트에서는 Maven의 pom.xml 파일에 있는 버전 요소를 사용하여 스냅샷(SNAPHOT)을 정의할 수 있습니다.

<groupId>example.project.maven</groupId>
<artifactId>MavenEclipseExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Maven pom example</description>

Maven에 대해 더 잘 알고 싶다면 다음 기사도 참조할 수 있습니다.

https://connected2know.com/programming/menu-maven-articles/

SDLC의 컨텍스트를 이해하면 스냅샷과 릴리스의 차이를 이해하는 데 도움이 됩니다.개발 프로세스 동안 개발자는 모두 기본 브랜치에 기능을 제공합니다.어느 시점에서 리드는 충분한 기능이 축적되었다고 판단하고 베이스라인 브랜치에서 릴리스 브랜치를 잘라냅니다.이 시점 이전의 빌드는 스냅샷입니다.이 시점까지의 빌드 포스트는 릴리즈입니다.릴리스 테스트 중에 결함이 발견될 경우 실제 가동 전에 릴리스 빌드도 변경될 수 있습니다.

이름에서 알 수 있듯이 스냅샷은 프로젝트의 상태와 그 시점에서의 종속성을 나타냅니다.프로젝트의 새로운 스냅샷이 발견될 때마다 로컬 저장소에 있는 프로젝트의 오래된 .jar 파일이 다운로드되어 교체됩니다.

스냅샷 버전은 현재 개발 중인 프로젝트에 사용됩니다.프로젝트가 현재 개발 중인 소프트웨어 컴포넌트에 의존하고 있는 경우 스냅샷 릴리스를 사용할 수 있습니다.Maven은 빌드를 실행할 때 정기적으로 저장소에서 최신 스냅샷을 다운로드하려고 시도합니다.

개발 단계에서 Maven 스냅샷은 nexus 저장소에서 사용 가능한 경우 매일 새로운 상위 버전을 찾고 다음 빌드를 위해 로컬로 다운로드합니다.

Respository Defination에서 설정할 수 있는 4가지 옵션

[Always], [Daily](기본값), [Interval], [Never],

주의: 프로덕션 릴리스에서는 스냅샷 버전에 의존하지 마십시오.

언급URL : https://stackoverflow.com/questions/5901378/what-exactly-is-a-maven-snapshot-and-why-do-we-need-it

반응형