2013-02-20 33 views
23

Tôi đang cố gắng để hiểu làm thế nào Gradle xử lý các phiên bản phụ thuộc với một dấu '+' như đã thấy trong ví dụ 8.1 ở đây: http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.htmlGradle phiên bản phụ thuộc dấu '+'

testCompile group: 'junit', name: 'junit', version: '4.+ 

Các tài liệu nói rằng điều này sẽ có được một phiên bản của junit> = 4.0. Làm thế nào để có được một phiên bản của một phụ thuộc lớn hơn (hoặc bằng), nói, 5,10? Có phải là 5.10+ hoặc 5.1+? Các cựu dường như không hoạt động chính xác, nhưng sau này không. Làm thế nào tôi sẽ nhận được một sự phụ thuộc lớn hơn hoặc bằng 1,22? 1.2+? Trong trường hợp này, nếu phiên bản 1.21 tồn tại và là phiên bản mới nhất, tôi muốn thất bại, vì tôi muốn lớn hơn hoặc bằng 1,22, nhưng 1.2+ sẽ tìm kiếm> = 1,20. Làm thế nào tôi có thể xác định điều này? Điều này có thể không? Tôi dường như không thể tìm thêm tài liệu về nó.

Chỉnh sửa: Tôi có xu hướng nghĩ về nó là 1.2+ tương đương với 1.2([0-9]+). Đây có phải là cách suy nghĩ đúng đắn không?

Trả lời

22

Trong tình huống này, nếu phiên bản 1,21 tồn tại và là phiên bản mới nhất, tôi muốn thất bại, vì tôi muốn lớn hơn hoặc bằng 1.22, nhưng 1.2+ sẽ tìm kiếm> = 1,20. Làm thế nào tôi có thể xác định điều này? Điều này có thể không?

Tôi không nghĩ có bất kỳ tài liệu về vấn đề này, nhưng vì Gradle ban đầu sử dụng Ivy dưới mui xe cho tất cả các chức năng quản lý sự phụ thuộc của nó, tôi đã xem xét các tài liệu liên quan đến Ivy phiên bản động:

http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

Nó chỉ có nhiều hơn một chút so với tài liệu Gradle. Tôi cố gắng thử nghiệm trong Gradle với dãy phiên bản Ivy-style:

compile group: 'log4j', name: 'log4j', version: '[1.2.12,1.2.17]' 

và đáng ngạc nhiên nó có vẻ đôi khi việc phụ thuộc vào những gì trong phạm vi phiên bản. Trong ví dụ trên, nó giải quyết thành 1.2.17.

Tôi biết điều này không giải quyết đầy đủ các câu hỏi của bạn (mà tôi cũng tò mò) nhưng hy vọng nó cung cấp một chút thông tin cho bạn.

+3

Ahhhh Ivy! Tôi tiếp tục tìm kiếm tài liệu maven về một cái gì đó về nó. http://ant.apache.org/ivy/history/trunk/settings/version-matchers.html Tôi giả định rằng phiên bản sửa đổi phụ là những gì đang xảy ra? –

1

Tôi nghĩ rằng vấn đề là bạn đang suy nghĩ sai về "+" về regex. Nó không có nghĩa là để được đọc như là một yếu tố biểu thức regex ("một hoặc nhiều ký tự số"), mà là "phiên bản mới nhất có sẵn trong đó mỗi thành phần SEMVER hàng đầu phù hợp với mẫu được cung cấp". Tài liệu tham khảo về lý do tại sao điều này không được ưu tiên thậm chí sử dụng ký hiệu này có thể được tìm thấy tại: http://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/

Các vấn đề liên quan