2016-06-29 16 views
10

Tôi hiện đang cố gắng để di chuyển một dự án Maven-GradleLàm thế nào để xác định một biến cho phiên bản phụ thuộc vào Gradle

Trong phiên bản Maven của tôi, tôi có các phiên bản phụ thuộc tất cả được liệt kê ra như thế này trong mẹ pom của tôi :

<properties> 
    <spring.version>4.2.3.RELEASE</spring.version> 
    <spring.boot.version>1.3.3.RELEASE</spring.boot.version> 
    ... 
</properties> 

Và sau đó tôi có thể định nghĩa một sự phụ thuộc như thế này trong bất kỳ của tôi phụ module:

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

Tôi đang cố gắng làm điều tương tự trên Gradle, vì một số mô-đun của tôi chia sẻ các phiên bản phụ thuộc như thế này và tôi không muốn sửa đổi nhiều hơn một nơi nếu tôi muốn nâng cấp Spring hoặc thực hiện thao tác tương tự.

Gần nhất tôi đã nhận nó là thế này:

dependencies { 
    ext.springVersion = '4.2.3.RELEASE' 
    compile "org.springframework:spring-jdbc:$springVersion" 
} 

Tuy nhiên, điều đó vẫn không làm việc. Cách được đề nghị để đạt được điều này trong Gradle là gì? Hay Gradle có đối xử khác với điều này? Có lẽ tâm trí của tôi vẫn còn quá nhiều trên Maven để xem một giải pháp khác.

Hãy nhớ rằng nỗ lực trên Gradle không phải là chính xác những gì tôi muốn. Tôi muốn có thể xác định các phụ thuộc trong tệp riêng biệt, không trực tiếp trên tệp sẽ sử dụng tệp đó.

+0

Tôi đã nhìn thấy những ví dụ với điều đó chuyển nhượng trước khối phụ thuộc. Khi bạn nói "điều đó vẫn không hoạt động", điều gì xảy ra chính xác? –

+0

IDE chỉ ra các lỗi nói rằng biến không được tìm thấy và không nhập thư viện ... Nhưng sau đó một lần nữa, có thể điều này liên quan nhiều hơn đến IntelliJ IDEA rồi tự nó –

Trả lời

5

Cách bạn đã cung cấp phiên bản phụ thuộc là chính xác và sẽ hoạt động. IntelliJ Idea có một số rắc rối với các biến trong việc xây dựng kịch bản gradle, vì vậy bạn không phải dựa vào nó, chỉ cần cố gắng chạy và xây dựng của bạn, cho dù là phụ thuộc tải xuống và dự án của bạn được xây dựng chính xác.

Nếu bạn muốn lưu trữ phụ thuộc của dự án trong tệp riêng biệt, cách tiếp cận phổ biến nhất là xác định chúng trong build.script gốc, qua subprojects đóng cho tất cả các tiểu dự án hoặc qua allprojects nếu bạn muốn chỉ định phụ thuộc cho tất cả các dự án của bạn bao gồm thư mục gốc. Điều này sẽ giống như sau:

subprojects{ 
    dependencies{ 
     compile ... 
    } 
} 

Bằng cách này bạn có thể cung cấp bất kỳ cấu hình chung cho tiểu dự án trong tập lệnh gốc. Hoặc bạn có thể khai báo một biến trong kịch bản xây dựng gốc, khởi tạo nó như một bản đồ với tất cả các thông số phụ thuộc bạn cần hoặc như một mảng với danh sách phụ thuộc duy nhất và sử dụng biến này trong các tiểu dự án của bạn, nếu bạn cần họ. Somethin như thế này trong thư mục gốc:

ext.commomLibs = [ 
    'testlibs' : 'junit:junit:4.8' 
] 

Lưu ý, bạn có thể xác định một giá trị của bản đồ như là một mảng của đặc tả lib để làm cho nó trỏ đến tất cả phụ thuộc này.Và sau đó bạn có thể sử dụng nó trong các tiểu dự án của bạn như:

dependencies{ 
    testCompile commomLibs.testlibs 
} 

Thêm một thay thế là sử dụng xây dựng kịch bản riêng biệt với phụ thuộc và áp dụng nó vào kịch bản buils bạn cần, như vậy

apply from: 'dependencies.script' 

Sau đó, bạn có thể đặt các phụ thuộc của bạn vào tập lệnh phụ thuộc và chỉ áp dụng nó trong bất kỳ tập lệnh xây dựng nào khác, nơi bạn cần các phụ thuộc này và/hoặc có thể là một số logic phổ biến.

2

Dưới cấu hình trong build.gradle tập tin làm việc cho tôi với gradle version 4.5, đăng nó ở đây để tham khảo trong tương lai - "ext"

ext { 
    springVersion = '5.0.3.RELEASE' 
} 

dependencies { 
    compile "org.springframework:spring-context:${springVersion}" 
} 
Các vấn đề liên quan