개발툴/Maven

Maven에게 최신 버전의 종속성을 사용하도록 지시하는 방법

Rateye 2021. 6. 27. 14:26
728x90
반응형
질문 : Maven에게 최신 버전의 종속성을 사용하도록 어떻게 지시합니까?

Maven에서 종속성은 일반적으로 다음과 같이 설정됩니다.

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>
      

이제 자주 릴리스되는 라이브러리로 작업하는 경우 <version> 태그를 지속적으로 업데이트하면 다소 성 가실 수 있습니다. Maven에 항상 저장소에서 사용 가능한 최신 버전을 사용하도록 지시하는 방법이 있습니까?

답변

노트:

언급 된 LATESTRELEASE 메타 버전은 6 년 전에 Maven 3 "재현 가능한 빌드를 위해" 플러그인 종속성 으로 인해 삭제되었습니다. (일반 종속성에 대해서는 여전히 완벽하게 작동합니다.) 플러그인 종속성에 대해서는이 Maven 3 호환 솔루션을 참조하십시오.

항상 최신 버전을 사용하려는 경우 Maven에는 버전 범위의 대안으로 사용할 수있는 두 개의 키워드가 있습니다. 사용중인 플러그인 / 종속성을 더 이상 제어 할 수 없으므로 이러한 옵션을주의해서 사용해야합니다.

플러그인 또는 종속성에 의존하는 경우 LATEST 또는 RELEASE의 버전 값을 사용할 수 있습니다. LATEST는 특정 아티팩트의 최신 릴리스 또는 스냅 샷 버전을 의미하며, 특정 저장소에 가장 최근에 배포 된 아티팩트입니다. RELEASE는 저장소에있는 마지막 비 스냅 샷 릴리스를 나타냅니다. 일반적으로 특정 버전의 아티팩트에 의존하는 소프트웨어를 설계하는 것은 모범 사례가 아닙니다. 소프트웨어를 개발하는 경우, 타사 라이브러리의 새 릴리스가 릴리스 될 때 버전 번호를 업데이트 할 필요가 없도록 RELEASE 또는 LATEST를 편리하게 사용할 수 있습니다. 소프트웨어를 릴리스 할 때 항상 프로젝트가 특정 버전에 종속되어 있는지 확인하여 빌드 또는 프로젝트가 제어 할 수없는 소프트웨어 릴리스의 영향을받을 가능성을 줄여야합니다. LATEST와 RELEASE는주의해서 사용하십시오.

자세한 내용은 Maven 책의 POM 구문 섹션 을 참조하십시오. 또는 종속성 버전 범위 에 대한이 문서를 참조하십시오.

  • 대괄호 ( [ & ] )는 "닫힌"(포함)을 의미합니다.
  • 괄호 ( ( & ) )는 "열기"(배타적)를 의미합니다.

다음은 다양한 옵션을 보여주는 예입니다. Maven 저장소에서 com.foo:my-foo에는 다음 메타 데이터가 있습니다.

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

해당 아티팩트에 대한 종속성이 필요한 경우 다음 옵션이 있습니다 (물론 여기에 관련 항목 만 표시하여 다른 버전 범위를 지정할 수 있음).

정확한 버전 선언 (항상 1.0.1로 확인) :

<version>[1.0.1]</version>
                                                              

명시 적 버전 선언 (Maven이 일치하는 버전을 선택할 때 충돌이 발생하지 않는 한 항상 1.0.1로 해결됨) :

<version>1.0.1</version>
                                                              

모든 1.x의 버전 범위를 선언합니다 (현재 1.1.1로 확인 됨).

<version>[1.0.0,2.0.0)</version>
                                                              

개방형 버전 범위 선언 (2.0.0으로 확인) :

<version>[1.0.0,)</version>
                                                              

버전을 LATEST로 선언합니다 (2.0.0으로 확인 됨) (maven 3.x에서 제거됨).

<version>LATEST</version>
                                                              

버전을 RELEASE로 선언합니다 (1.1.1로 확인 됨) (maven 3.x에서 제거됨).

<version>RELEASE</version>
                                                              

기본적으로 자체 배포는 Maven 메타 데이터의 "latest"항목을 업데이트하지만 "release"항목을 업데이트하려면Maven super POM 에서 "release-profile"을 활성화해야합니다. "-Prelease-profile"또는 "-DperformRelease = true"를 사용하여이를 수행 할 수 있습니다.

Maven이 종속성 버전 (LATEST, RELEASE 및 버전 범위)을 선택할 수 있도록 허용하는 모든 접근 방식은 이후 버전이 다른 동작을 가질 수 있으므로 (예 : 종속성 플러그인이 이전에 기본값으로 전환 한 경우) 빌드 시간 문제를 열어 둘 수 있다는 점을 강조 할 가치가 있습니다. 혼란스러운 결과와 함께 true에서 false 로의 값).

따라서 일반적으로 릴리스에서 정확한 버전을 정의하는 것이 좋습니다. Tim의 답변이 지적했듯이 maven-versions-plugin 은 종속성 버전, 특히 versions : use-latest-versionsversions : use-latest-releases 목표를 업데이트하는 데 편리한 도구입니다.

출처 : https://stackoverflow.com/questions/30571/how-do-i-tell-maven-to-use-the-latest-version-of-a-dependency
728x90
반응형