Maven에 최신 버전의 종속성을 사용하도록하려면 어떻게해야합니까?


788

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

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

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


@Martin xyz-SNAPSHOT 규칙을 알고 있지만 최종 버전으로 리포지토리에 릴리스되는 라이브러리에 대해 생각하고있었습니다 (예 : dream-library-1.2.3.jar에서 dream-library-1.2.4.jar로 이동). , 등등).
Anders Sandvig

176
빌드 재현성을 위해이 방법을 권장하지 않습니다 (버전 범위를 사용하지 않음). 알 수없는 이유로 갑자기 실패하기 시작한 빌드는 수동으로 버전 번호를 업데이트하는 것보다 더 성가시다.
Pascal Thivent

12
@PascalThivent 연속 릴리스를 수행하는 경우 pom에서 릴리스 번호를 수동으로 업데이트하는 것은 쉽지 않습니다. 나는 scm 플러그인과 결합 된 버전 플러그인을 사용하여 이것을지나갑니다 (내 답변 참조).
Adam Gent

4
@PascalThivent 둘 다 짜증나지만 다른 방식입니다. 다른 사람 이이 상황이 더 좋을 것이라고 결정했기 때문에 내 상황에 따라 둘 다 선택하고 강제로 사용하지 않으려 고합니다.
piegames

답변:


745

노트:

이 답변은 Maven 2에만 적용됩니다! 언급 LATESTRELEASE메타 버전 6 년 전 Maven 3에서 "재생 가능한 빌드를 위해"삭제되었습니다 . 이 Maven 3 호환 솔루션을 참조하십시오 .


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

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

자세한 내용은 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>

버전을 최신 버전으로 선언 (2.0.0으로 해결) (maven 3.x에서 제거됨)

<version>LATEST</version>

버전을 RELEASE (1.1.1로 해결됨)로 선언하십시오 (maven 3.x에서 제거됨).

<version>RELEASE</version>

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


Maven이 의존성 버전 (LATEST, RELEASE 및 버전 범위)을 선택할 수있는 모든 접근 방식은 이후 버전이 다른 동작을 가질 수 있기 때문에 시간 문제를 빌드 할 수있게 해줍니다 (예 : 의존성 플러그인이 이전에 기본값을 전환했습니다) 혼란스러운 결과와 함께 true에서 false 로의 값).

따라서 일반적으로 릴리스에서 정확한 버전을 정의하는 것이 좋습니다. 으로 팀의 답변이 지적은 받는다는 - 버전 - 플러그인은 의존성 버전, 특히 업데이트를위한 편리한 도구입니다 사용 - 최신 - 버전 : 버전버전 : 사용 - 최신 - 방출 목표를.


76
안녕 리치! RELEASE 및 LATEST 버전 마커가 Maven 3.x에서 더 이상 지원되지 않는 것 같습니다 .
파스칼 티 벤트

16
문서를 올바르게 이해하면 해당 지원 중단은 일반적인 종속성이 아닌 플러그인에만 적용되는 것으로 보입니다
Mond Raymond

9
@RichSeller 헤이 리치; Maven 3.0에서 더 이상 사용할 수 없다는 것을 알기 전에 약간의 시간을 보냈습니다.) Maven 3.0 지원 중단을 나타내는 업데이트로 시작하도록 답변 편집을 고려 하시겠습니까? 무리 감사!
Miquel

6
좋은 균형은 메이저 버전을 잠그는 것이지만 최신 마이너 (또는 패치) 버전을 얻는 것입니다 (이것은 의존하는 artifcat에서만 버그 수정에 사용됩니다). 현재 구문에서는 다음과 같은 범위에서만 가능합니다. (참고 : 괄호로 시작하고 괄호로 끝남) :[1.1,2.0)
Amr Mostafa

2
FWIW ... Maven3 호환성 업데이트 링크 : cwiki.apache.org/confluence/display/MAVEN/…
dyodji

384

이제이 주제가 오래 되었다는 것을 알고 있지만 질문과 OP 제공 답변을 읽으면 실제로 Maven Versions Plugin 이 그의 질문에 더 나은 답변 일 것 같습니다 .

특히 다음 목표가 사용될 수 있습니다.

  • versions : use-latest-versions 는 최신 버전 인 모든 버전을 pom에서 검색하여 최신 버전으로 바꿉니다.
  • versions : use-latest-releases는 최신 릴리스 인 모든 비 SNAPSHOT 버전을 pom에서 검색하여 최신 릴리스 버전으로 바꿉니다.
  • versions : update-properties 는 프로젝트에 정의 된 속성을 업데이트하여 사용 가능한 최신 버전의 특정 종속성에 해당합니다. 이는 종속 제품군이 모두 하나의 버전으로 잠겨 야하는 경우에 유용 할 수 있습니다.

다음과 같은 다른 목표도 제공됩니다.

  • versions : display-dependency-updates 는 프로젝트의 종속성을 스캔하고 사용 가능한 최신 버전이있는 해당 종속성에 대한 보고서를 생성합니다.
  • versions : display-plugin-updates 는 프로젝트 플러그인을 스캔하고 최신 버전이있는 플러그인에 대한 보고서를 생성합니다.
  • versions : update-parent 는 사용 가능한 최신 버전을 참조하도록 프로젝트의 상위 섹션을 업데이트합니다. 예를 들어 회사 루트 POM을 사용하는 경우 최신 버전의 회사 루트 POM을 사용해야하는 경우이 목표가 도움이 될 수 있습니다.
  • versions : update-child-modules 는 프로젝트 하위 모듈의 상위 섹션을 업데이트하여 버전이 현재 프로젝트 버전과 일치하도록합니다. 예를 들어, 집계하는 프로젝트의 상위이기도 한 수집기 pom이 있고 하위 및 상위 버전이 동기화되지 않은 경우이 모조가 하위 모듈의 버전을 수정하는 데 도움이 될 수 있습니다. (프로젝트가 너무 잘못되어 버전 불일치로 인해 빌드 할 수없는 경우이 목표를 실행하려면 -N 옵션으로 Maven을 호출해야 할 수도 있습니다).
  • versions : lock-snapshots 는 모든 -SNAPSHOT 버전에 대한 pom을 검색하여 해당 -SNAPSHOT의 현재 타임 스탬프 버전 (예 : -20090327.172306-4)으로 대체합니다.
  • versions : unlock-snapshots 는 모든 타임 스탬프 잠금 스냅 샷 버전에 대한 pom을 검색하여 -SNAPSHOT으로 바꿉니다.
  • versions : resolve-ranges 는 버전 범위를 사용하여 종속성을 찾고 사용중인 특정 버전으로 범위를 확인합니다.
  • versions : use-releases는 릴리스 된 모든 -SNAPSHOT 버전을 pom에서 검색하여 해당 릴리스 버전으로 바꿉니다.
  • versions : use-next-releases 는 최신 릴리스 인 모든 비 SNAPSHOT 버전을 pom에서 검색하여 다음 릴리스 버전으로 바꿉니다.
  • versions : use-next-versions 는 최신 버전 인 모든 버전을 pom에서 검색하여 다음 버전으로 바꿉니다.
  • versions : commit 은 pom.xml.versionsBackup 파일을 제거합니다. 내장 된 "Poor Man 's SCM"의 절반을 구성합니다.
  • versions : revert 는 pom.xml.versionsBackup 파일에서 pom.xml 파일을 복원합니다. 내장 된 "Poor Man 's SCM"의 절반을 구성합니다.

나중에 참조 할 수 있도록 포함시킬 것이라고 생각했습니다.


10
이와 관련하여 "릴리스"와 "버전"의 차이점은 무엇입니까?
Ben Noland

1
@ BenNoland,이 경우의 차이점은 다음 버전이 릴리스 아티팩트 일 필요가 없다는 것입니다. 예를 들어 1.0.0-SNAPSHOT, 1.0.0 및 1.0.1-SNAPSHOT 버전의 이슈가 있고 1.0.0-SNAPSHOT에 대한 pom 참조가있는 버전 : 다음 버전 및 버전 : 다음 릴리스는 1.0.0으로 해석됩니다. 반면 version : latest-versions 및 versions : latest-releases는 1.0.1-SNAPSHOT 및 1.0.0으로 각각 결정됩니다.
Ryan Beesley 2016 년

1
이 멋진 테이블에서 버전 / 릴리스 / 스냅 샷 간의 불확실성을 해결할 수 있습니다. goo.gl/iDq6PK
Ev0oD

1
가능하고 관련없는 목표를 모두 인쇄하는 것은 도움이되지 않습니다.
MariuszS

2
나는 version : use-latest-versions가 OP의 대부분의 문제를 해결한다고 생각합니다.
Alex R

172

살펴 보시기 바랍니다 이 페이지를 (섹션 "종속성 버전 범위"). 당신이하고 싶은 것은

<version>[1.2.3,)</version>

이 버전 범위는 Maven2에서 구현됩니다.


어떤 이유로이 옵션이 효과가 없었기 때문에 범위 내에서 버전을 선택했지만 최신 버전은 선택하지 않았습니다.
sorin

4
엄격한 패턴을 준수하지 않는 경우 Maven이 숫자가 아닌 문자열로 비교하는 경우 Maven이 버전 번호를 비교하는 방법을 자세히 살펴볼 수 있습니다.
Thorbjørn Ravn Andersen

이 페이지는 Codehaus에 있으며 "Maven 2.0에 대해 아직 구현되지 않은"것으로 설명합니다. Maven 설명서 자체는 버전 범위에 대해 아무 말도하지 않습니다. 뭔가 빠졌습니까? 버전 범위는 언제 소개 되었습니까? 공식 문서에서 어디에 설명되어 있습니까?
섀넌

1
버전 범위가 틀렸다는 것은 모든 버전이 1.2.3 이상에서 정상임을 의미합니다. 이것은 최신 버전이 아닙니다.
MariuszS

@sorin 프로젝트에서 문제의 인공물에 의존하는 다른 종속성이 있습니까? mvn dependency:tree -Dverbose알아 내려고 노력하십시오 . 예기치 않은 버전이 설명 될 수 있습니다.
Eugene Beresovsky

83

다른 사람들과 달리 항상 최신 버전을 원할 많은 이유가 있다고 생각 합니다. 특히 지속적인 배포를 수행하는 경우 (하루에 5 개의 릴리스가있는 경우도 있음) 다중 모듈 프로젝트를 원하지 않습니다.

내가하는 일은 Hudson / Jenkins가 모든 빌드마다 다음을 수행하도록하는 것입니다.

mvn clean versions:use-latest-versions scm:checkin deploy -Dmessage="update versions" -DperformRelease=true

즉, 버전 플러그인과 scm 플러그인을 사용하여 종속성을 업데이트 한 다음 소스 제어에 체크인합니다. 예, CI가 SCM 체크인을 수행하게했습니다 (어쨌든 maven 릴리스 플러그인을 위해해야합니다).

원하는 버전 만 업데이트하도록 버전 플러그인을 설정하려고합니다.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>versions-maven-plugin</artifactId>
    <version>1.2</version>
    <configuration>
        <includesList>com.snaphop</includesList>
        <generateBackupPoms>false</generateBackupPoms>
        <allowSnapshots>true</allowSnapshots>
    </configuration>
</plugin>

릴리스 플러그인을 사용하여 -SNAPSHOT를 처리하고 릴리스 버전 -SNAPSHOT (중요)가 있는지 확인하는 릴리스를 수행합니다.

내가하는 일을하면 모든 스냅 샷 빌드의 최신 버전과 릴리스 빌드의 최신 릴리스 버전이 제공됩니다. 빌드도 재현 할 수 있습니다.

최신 정보

이 워크 플로에 대해 구체적으로 묻는 의견이 있습니다. 필자는이 방법을 더 이상 사용하지 않으며 메이븐 버전 플러그인이 버그가 있고 일반적으로 결함이있는 큰 이유가 있다고 말할 것이다.

버전 플러그인을 실행하여 버전을 조정하면 pom이 올바르게 실행 되려면 기존 버전이 모두 있어야하기 때문에 결함이 있습니다. 즉, pom에서 참조 된 버전을 찾을 수없는 경우 버전 플러그인이 최신 버전으로 업데이트 할 수 없습니다. 디스크 공간 때문에 구 버전을 정리하기 때문에 실제로는 다소 성가신 일입니다.

실제로 버전을 조정하려면 maven과 별도의 도구가 필요합니다 (따라서 제대로 실행하려면 pom 파일에 의존하지 않음). 나는 Bash 인 낮은 언어로 그러한 도구를 작성했습니다. 스크립트는 버전 플러그인과 같은 버전을 업데이트하고 pom을 소스 제어로 다시 확인합니다. 또한 mvn 버전 플러그인보다 100 배 빠르게 실행됩니다. 불행히도 공용 사용법으로 작성되지는 않았지만 사람들이 관심이 있다면 그렇게하여 요지 또는 github에 넣을 수 있습니다.

몇 가지 의견이 우리가하는 일에 대해 물었을 때 워크 플로로 돌아갑니다.

  1. 우리는 자신의 젠킨스 작업과 함께 자신의 저장소에 20 개 정도의 프로젝트가 있습니다.
  2. 우리가 릴리스 할 때 maven 릴리스 플러그인이 사용됩니다. 그 워크 플로는 플러그인 설명서에서 다룹니다. maven release plugin 종류는 짜증나고 (그리고 친절합니다) 작동합니다. 어느 날 우리는이 방법을보다 최적의 것으로 대체 할 계획입니다.
  3. 프로젝트 중 하나가 jenkins를 릴리스 한 다음 특별한 작업을 실행하면 모든 버전 업데이트 작업을 호출합니다 (javen jenkins 릴리스 플러그인도 꽤 엉성하기 때문에 jenkins가 릴리스를 복잡한 방식으로 알고있는 방법).
  4. 모든 버전 업데이트 작업은 20 개의 모든 프로젝트에 대해 알고 있습니다. 실제로 모듈 섹션의 모든 프로젝트를 종속성 순서로 특정하는 것은 집 계기입니다. Jenkins는 매직 groovy / bash foo를 실행하여 모든 프로젝트를 최신 버전으로 업데이트 한 다음 폼을 체크인합니다 (모듈 섹션에 따라 종속성 순서로 다시 수행).
  5. 각 프로젝트에 대해 pom이 변경되면 (일부 종속성의 버전 변경으로 인해) pom이 체크인 된 다음 즉시 해당 프로젝트에 대해 해당 작업을 실행하기 위해 jenkins를 핑 (ping)합니다 (그렇지 않으면 빌드 종속성 순서를 유지하는 것입니다) SCM 설문 스케줄러의

이 시점에서 릴리스 및 자동 버전을 일반 빌드와 별도의 도구로 만드는 것이 좋습니다.

이제 위에 나열된 문제로 인해 maven 종류의 짜증을 느낄 수 있지만 확장 가능한 구문 (일명 XML) 을 구문 분석하기 쉬운 선언 도구가없는 빌드 도구로는 실제로 상당히 어려울 것 입니다.

실제로 우리는 네임 스페이스를 통해 사용자 정의 XML 속성을 추가하여 bash / groovy 스크립트를 암시합니다 (예 :이 버전을 업데이트하지 마십시오).


5
답변에 동기 부여 (연속 배포)를 포함 해 주셔서 감사합니다.
David J. Liszewski

10
여기서는이 방법으로 빌드를 재현 할 수 있다는 점이 중요하다고 생각하지만, 버전 범위 또는 -LATEST를 사용할 때는 그렇지 않습니다!
marc.guenther

빌드를 실행하기 전에 프로젝트 pom을 변경하는 외부 도구를 사용하여 솔루션을 두 번째로 만들고 싶습니다. 버전-범위-플러그인은 버전뿐만 아니라 날짜를 고려하는 것과 같이 본질적으로 버그가 있기 때문에이 접근법을 사용하고 있습니다.
다니엘 Hajduk

37

종속성 구문은 Dependency Version Requirement Specification 문서에 있습니다. 완전성을위한 것입니다 :

종속성 version요소는 효과적인 종속성 버전을 계산하는 데 사용되는 버전 요구 사항을 정의합니다. 버전 요구 사항은 다음과 같은 구문을 갖습니다.

  • 1.0: 1.0의 "소프트"요구 사항 (종속성에 대한 다른 모든 범위와 일치하는 경우 권장 사항 임)
  • [1.0]: 1.0의 "하드"요구 사항
  • (,1.0]: x <= 1.0
  • [1.2,1.3]: 1.2 <= x <= 1.3
  • [1.0,2.0): 1.0 <= x <2.0
  • [1.5,): x> = 1.5
  • (,1.0],[1.2,): x <= 1.0 또는 x> = 1.2; 여러 세트는 쉼표로 구분됩니다
  • (,1.1),(1.1,): 1.1 제외 (예 :이 라이브러리와 함께 작동하지 않는 것으로 알려진 경우)

귀하의 경우에는 다음과 같은 일을 할 수 있습니다 <version>[1.2.3,)</version>


15

개발하는 동안 분명히 많이 바뀌는 개발 버전에 의존하고 있습니까?

개발 릴리스 버전을 늘리는 대신 필요할 때 덮어 쓰는 스냅 샷 버전 만 사용할 수 있습니다. 즉, 사소한 변경마다 버전 태그를 변경할 필요가 없습니다. 1.0-SNAPSHOT과 같은 것 ...

그러나 아마도 당신은 다른 것을 달성하려고 노력하고 있습니다.)


7

LATEST를 사용하는 사람은 -U가 있는지 확인하십시오. 그렇지 않으면 최신 스냅 샷을 가져 오지 않습니다.

mvn -U dependency:copy -Dartifact=com.foo:my-foo:LATEST
// pull the latest snapshot for my-foo from all repositories

-UI를 사용하는 경우에도Couldn't download artifact: Failed to resolve version for com.app:common:jar:LATEST
Robert

7

이 질문이 제기 될 때까지 maven에 버전 범위가있는 꼬임이 있었지만 최신 버전의 maven에서 해결되었습니다. 이 기사는 maven이 버전을 이해하는 방법을 더 잘 이해하기 위해 버전 범위 작동 방식 및 모범 사례를 잘 설명합니다. https://docs.oracle.com/middleware/1212/core/MAVEN/maven_version.htm#MAVEN8855


2
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Karl Richter

6

진실은 3.x에서도 여전히 작동합니다. 놀랍게도 프로젝트가 빌드되고 배포됩니다. 그러나 LATEST / RELEASE 키워드는 m2e 및 eclipse에서 문제를 일으킨다. ALSO 프로젝트는 LATEST / RELEASE를 통해 배치 된 버전이 버전을 인식하지 못하는 종속성에 의존한다.

버전을 속성으로 정의하고 다른 곳에서 참조하려고하면 문제가 발생합니다.

결론은 가능한 경우 버전 메이븐 플러그인을 사용 하는 것입니다.


5

버전 범위를 사용하지 않으려는 경우가 있습니다. 특히 지속적으로 배포되고 많은 버전이있는 경우 (주로 개발 중일 때) 종속성을 해결하는 데 "느린"것 같습니다.

한 가지 해결 방법은 versions-maven-plugin 을 사용하는 것 입니다. 예를 들어 속성을 선언 할 수 있습니다.

<properties>
    <myname.version>1.1.1</myname.version>
</properties>

버전 -maven-plugin을 pom 파일에 추가하십시오.

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <properties>
                    <property>
                        <name>myname.version</name>
                        <dependencies>
                            <dependency>
                                <groupId>group-id</groupId>
                                <artifactId>artifact-id</artifactId>
                                <version>latest</version>
                            </dependency>
                        </dependencies>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
</build>

그런 다음 종속성을 업데이트하려면 목표를 실행해야합니다.

mvn versions:update-properties validate

1.1.1보다 최신 버전이 있으면 다음과 같이 알려줍니다.

[INFO] Updated ${myname.version} from 1.1.1 to 1.3.2

3

Maven이 최신 버전의 종속성을 사용하도록하려면 Versions Maven Plugin 을 사용 하고이 플러그인을 사용하는 방법을 사용할 수 있습니다. Tim은 이미 좋은 대답을했으며 그의 대답을 따르십시오 .

그러나 개발자는 이러한 유형의 사례를 권장하지 않습니다. 왜?

Pascal Thivent 가 질문에 대한 의견을 제시 한 이유 에 대한 답변

빌드 재현성을 위해이 방법을 권장하지 않습니다 (버전 범위를 사용하지 않음). 알 수없는 이유로 갑자기 실패하기 시작한 빌드는 수동으로 버전 번호를 업데이트하는 것보다 더 성가시다.

이런 종류의 연습을 권장합니다.

<properties>
    <spring.version>3.1.2.RELEASE</spring.version>
</properties>

<dependencies>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

</dependencies>

유지 관리하기 쉽고 디버깅하기 쉽습니다. POM을 즉시 업데이트 할 수 있습니다.


versions-maven-plugin을 사용하면 빌드를 여전히 재현 할 수 있습니다. maven 버전 업데이트는 별도의 커밋으로 수행 할 수 있습니다 (내 답변에서 볼 수 있듯이 별도의 목표를 지정해야하며 빌드에서 마술처럼 발생하지 않습니다).
Markon

1

maven 3.5.4의 내 솔루션은 일식에서 넥서스를 사용합니다.

<dependency>
    <groupId>yilin.sheng</groupId>
    <artifactId>webspherecore</artifactId>
    <version>LATEST</version> 
</dependency>

그런 다음 일식에서 : atl + F5을 선택하고force update of snapshots/release

그것은 나를 위해 작동합니다.


다양한 게시물에서 위에서 언급 한 이유 때문에 커맨드 라인에서 작동하지 않습니다. 우리 중 많은 사람들이 자동화 된 빌드를 따라야하므로 POM은 Eclipse뿐만 아니라 명령 줄에서 실행될 때 작동해야합니다.
bigbadmouse

'최신'를 사용했을 때 나는 받는다는 3.5.4을 사용하여이있어 오전 : 다음 중 하나입니다 최신 또는 RELEASE (둘 다이되지되고있다) @ 154, 칼럼 (13)
레오나르도 레오나르도
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.