Gradle - tải phiên bản phát hành mới nhất của phụ thuộc


93

Cách dễ nhất để nói Gradlenhững điều sau đây là gì:

Truy xuất phụ thuộc 'junit' và lấy phiên bản 'phát hành' mới nhất của nó.

Quản lý kho lưu trữ Maven và Ivy là một việc mới đối với tôi. Tôi đã thử các bước sau và chúng dẫn đến Could not resolve dependency ...lỗi:

  • Viết compile "junit:junit:latest.release"với kho lưu trữ được đặt thành chỉ mavenCentral() (tuy nhiên, nó hoạt động nếu tôi nói "junit: junit: 4.10").

  • Viết compile "junit:junit:latest.release"với bộ lưu trữ theo cách sau:

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
  • Đã cố gắng sử dụng kho lưu trữ Spring Source Ivy:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }

Có lẽ tôi hiểu sai điều gì đó. Tại sao lấy phiên bản mới nhất của phụ thuộc lại là một nhiệm vụ khó khăn như vậy?


Phiên bản động có thể là một trình giữ chỗ cho phiên bản mới nhất hiện có latest.integration,. tài liệu gradle cho các phiên bản động
Bhavik

Câu trả lời:


48

Gradle hiện không hỗ trợ Maven's RELEASE(hiếm khi được sử dụng và không được dùng nữa) nhưng nó hỗ trợ Ivy's latest.release. Tuy nhiên, khuyến nghị chung là xây dựng dựa trên các phiên bản chính xác. Nếu không, việc xây dựng có thể trở thành một cuộc xổ số.


Maven cũng không hỗ trợ RELEASE. Chỉ số phiên bản cố định.
khmarbaise

10
Tôi đã kiểm tra lại. Maven không hỗ trợ RELEASE, cả phiên bản 2 và 3.
Peter Niederwieser

Bạn đúng rồi. Tôi đã nhầm lẫn điều đó với các phiên bản plugin, vì Maven 3 nó không cho phép RELEASE / LATEST nữa. Nhưng tất nhiên là thực tế không tốt khi sử dụng các số nhận dạng phiên bản như vậy.
khmarbaise

Một phần mềm trong kho lưu trữ Maven Release là một phần mềm đã hoàn thành tất cả các thử nghiệm tự động (và có thể là thủ công) có thể. Quá trình đó nên bao gồm kiểm tra tính tương thích của API, kiểm tra hồi quy, v.v. Tại sao sau đó xây dựng có thể trở thành một xổ số? Chỉ khi bạn đang "giải phóng" các hiện vật chưa được kiểm tra đầy đủ.
RCross

2
Cấp hỗ trợ 'mới nhất.release' (nhưng không hỗ trợ 'RELEASE'). Điều này cực kỳ hữu ích để đảm bảo rằng các thư viện nội bộ của riêng bạn là phiên bản mới nhất, đã được chứng minh - tất nhiên tôi sẽ không bao giờ ủng hộ việc sử dụng nó cho các thư viện bên ngoài / bên thứ ba vì lý do tương tự như Peter đề xuất ở trên.
RCross

257

Đôi khi, việc tải bản phát hành mới nhất có thể khá hữu ích - ví dụ: nếu bạn phát hành thường xuyên các phần phụ thuộc của riêng mình.

Bạn có thể tải phiên bản mới nhất như

compile "junit:junit:+"

hoặc tốt hơn chỉ định ít nhất là phiên bản chính như

compile "junit:junit:4.+"

27
chỉ cho bản ghi: đó thực sự phải là dấu ngoặc kép! Tôi đã sử dụng đơn báo giá cho hầu hết các tờ khai phụ thuộc của tôi và phát hiện ra rằng code 'junit:junit:4.+'không làm việc
azonli

1
@azonli Có vẻ phù hợp với tôi với các dấu ngoặc kép, ít nhất là đối với các phụ thuộc địa phương. lỗi gì bạn nhận được?
David Moles

3
nó không phải là "testCompile" thay vì "biên dịch"? bởi vì tạo tác không cần thiết trong một bản phát hành
Martin Dürrmeier

6
Không phải lúc nào bạn cũng cần một bản dựng có thể tái tạo.
Lakatos Gyula

2
@SimonForsberg ... Đúng vậy, tuy nhiên khi bạn đang chịu phát triển bạn có thể muốn (a) theo gay cấn hay (b) đảm bảo sửa lỗi cho v 4.+được giữ đến nay cho dự án của bạn. Khi bạn đạt đến giai đoạn Alpha, Beta, -RC hoặc -RELEASE; Tôi hoàn toàn đồng ý rằng bạn cần phải 'đóng đinh ' những phiên bản đó vào một cực. Tôi sử dụng trình properties' file to set version specifiers: biên dịch "junit: junit: $ { junitVer }" `.
sẽ

25

Kiểm tra Gradle-Phiên bản-Plugin. Nó thực hiện chính xác những gì bạn muốn: https://github.com/ben-manes/gradle-versions-plugin

Để cài đặt, hãy xem trang github. Về cơ bản, bạn cần thêm hai dòng này vào tệp build.gradle - dự án của mình:

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

Sau đó, bạn có thể sử dụng plugin, bằng cách chạy lệnh này trong thiết bị đầu cuối trong dir dự án của bạn:

./gradlew dependencyUpdates -Drevision=release

Và nó sẽ cho bạn thấy những phụ thuộc nào đã lỗi thời!


Bạn cũng có thể thêm nó vào initscript nếu bạn không muốn phải bao gồm plugin trong mọi dự án của mình. Xem câu trả lời này cho câu hỏi khác để biết chi tiết.
Laurence Gonsalves

điều gì sẽ xảy ra nếu các phần phụ thuộc nằm trong cùng một repo và bạn luôn muốn có phiên bản mới nhất?
Barry Kelly

8

Hướng dẫn sử dụng Gradle mới nhất đề cập và giải thích các phiên bản đăng nhập cộng:

Từ 7.2. Khai báo các phụ thuộc của bạn :

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

... Kịch bản xây dựng cũng nói rằng bất kỳ junit> = 4.0 nào là cần thiết để biên dịch các bài kiểm tra của dự án.

Từ ngày 23.7. Cách phân giải phụ thuộc hoạt động :

Nếu phần phụ thuộc được khai báo là phiên bản động (như 1. +), Gradle sẽ giải quyết điều này thành phiên bản tĩnh mới nhất có sẵn (như 1.2) trong kho lưu trữ. Đối với kho lưu trữ Maven, điều này được thực hiện bằng cách sử dụng tệp maven-metadata.xml, trong khi đối với kho lưu trữ Ivy, điều này được thực hiện bằng cách liệt kê thư mục.


1
Gợi ý quan trọng: dấu + không nhất thiết phải có phiên bản mới nhất. Xem bình luận của tôi ở trên.
Harry G.

3

Trong Android Studio:

Nếu bạn đang sử dụng +phiên bản và muốn biết phiên bản nào thực sự đang được sử dụng , hãy chọn Projecttrong thanh bên, sau đó bên dưới External Librariesbạn sẽ thấy số phiên bản thực đang được sử dụng.


Bạn đang đề cập đến một IDE cụ thể? :-)
Inego

Inego: vâng, tôi đã thêm nó vào câu trả lời ;-)
lenooh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.