java - mvn2 download




Maven에게 의존성의 최신 버전을 사용하도록 어떻게 말합니까? (8)

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

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

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


Maven이 의존성의 최신 버전을 사용하게하려면 maven-versions-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을 즉시 업데이트 할 수 있습니다.


누가 가장 최신 버전을 사용했는지 확인하십시오. 그렇지 않으면 최신 스냅 샷을 가져올 수 없습니다.

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

때로는 지속적인 배포가 있고 버전 개발이 많은 경우 (주로 무거운 개발 중에) 종속성 문제를 "느리게"처리하기 때문에 버전 범위를 사용하지 않는 경우가 있습니다.

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

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

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

<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

아마도 개발 중에 분명히 많이 변하는 개발 버전에 의존하고 있습니까?

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

그러나 어쩌면 당신은 다른 것을 성취하려고 노력하고 있습니다.)


이븐에서 넥서스를 사용하여 메이븐 3.5.4에서 내 솔루션 :

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

eclipse에서 : atl + F5 를 선택하고 force update of snapshots/releaseforce update of snapshots/release 선택하십시오.

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


이제 나는이 주제가 오래되었다는 것을 알고 있지만, 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이 있고 하위 버전과 상위 버전이 동기화되지 않은 경우이 mojo는 하위 모듈의 버전을 수정하는 데 도움이 될 수 있습니다. (프로젝트가 잘못되어 버전 불일치로 인해 빌드 할 수없는 경우이 목표를 실행하려면 -N 옵션과 함께 Maven을 호출해야 할 수도 있습니다).
  • versions : lock-snapshots 는 pom에서 모든 -SNAPSHOT 버전을 검색하고이를 현재 타임 스탬프 버전 인 -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"의 절반을 형성합니다.

그냥 내가 미래의 참조를 위해 그것을 포함시킬 줄 알았다.


진실은 3.x 에서조차도 여전히 효과가 있으며 놀랍게도 프로젝트가 구축되고 배포됩니다. 그러나 LATEST / RELEASE 키워드는 m2e와 eclipse에서 문제를 일으키며, 프로젝트는 LATEST / RELEASE를 통해 배포 된 종속성에 따라 버전을 인식하지 못합니다.

또한 버전을 속성으로 정의하려고 시도하고 다른 곳에서 참조하려는 경우 문제가 발생할 수 있습니다.

따라서 결론은 가능한 경우 maven-versions-plugin 하는 것입니다.


이 페이지를 보시기 바랍니다 ( "의존성 버전 범위"섹션). 네가하고 싶은게 뭔가있어.

<version>[1.2.3,)</version>

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







maven-metadata