2012-12-17 31 views
126

Sự khác nhau giữa việc khai báo kho lưu trữ trong phần buildScript của bản xây dựng gradle hoặc ở cấp độ gốc của bản dựng là gì.Sự phụ thuộc của bản xây dựng Gradle

Lựa chọn 1:

build.gradle:

buildScript { 
    repositories { 
     mavenCentral(); 
    } 
} 

hoặc

build.gradle:

repositories { 
    mavenCentral(); 
} 

Trả lời

115

Các kho trong buildscript bl ock được sử dụng để tìm nạp các phụ thuộc của các phụ thuộc buildScript của bạn. Đây là những phụ thuộc được đặt trên classpath của build của bạn và bạn có thể tham khảo từ file build của bạn. Ví dụ các plugin bổ sung tồn tại trên internet.

Các kho lưu trữ ở cấp cơ sở được sử dụng để tìm nạp các phụ thuộc mà dự án của bạn phụ thuộc vào. Vì vậy, tất cả các phụ thuộc bạn cần để biên dịch dự án của bạn.

+12

Nếu tôi cần maven trung tâm cho cả buildscript tôi và dự án của tôi, tôi có cần phải khai báo nó hai lần? –

+13

Có, bạn cần phải xác định nó hai lần sau đó thực sự. –

+0

Ví dụ về điều này, plugin Spring propdeps có thể được thêm vào bản dựng để bật các từ khóa "được cung cấp" và "tùy chọn" cho các phụ thuộc ngoài từ khóa "biên dịch" và "testCompile" thông thường. Lưu ý: Plugin chiến dịch đã cung cấp từ khóa "được cung cấp", bạn chỉ cần propdep cho các dự án jar sẽ được triển khai bên trong một cuộc chiến. – Powerlord

12

Tập lệnh xây dựng (ví dụ: build.gradle) có thể có một số phụ thuộc để thực thi chính kịch bản dựng. Bạn sẽ kèm theo những phụ thuộc đó trong khối buildScript. Chapter 4 of Gradle Beyond the Basics mô tả chi tiết.

+23

Liên kết không hoạt động nếu không có xác thực. – RaGe

1

Tôi muốn cung cấp cho bạn quan niệm rõ ràng. Vì lý do này, tôi đính kèm mã số ảnh chụp build.grade để hiểu rõ hơn.

buildscript phụ thuộc:

buildscript { 
    repositories { 
     maven { url("https://plugins.gradle.org/m2/") } 
    } 

    dependencies { 
     classpath 'net.saliman:gradle-cobertura-plugin:2.3.2' 
     classpath 'com.netflix.nebula:gradle-lint-plugin:latest.release' 
    } 
} 

gốc tốt nghiệp/Thực lõi phụ thuộc:

repositories{ 
    mavenLocal() 
    maven { url("https://plugins.gradle.org/m2/") } 
    maven { url "https://repo.spring.io/snapshot" } 
} 

dependencies { 
     //Groovy 
     compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.3.10' 

     //Spock Test 
     compile group: 'org.spockframework', name: 'spock-core', version: '1.0-groovy-2.3' 

     //Test 
     testCompile group: 'junit', name: 'junit', version: '4.10' 
     testCompile group: 'org.testng', name: 'testng', version: '6.8.5' 
} 

Vì vậy, đầu tiên tôi muốn làm rõ trong từ duy nhất mà

i) tệp jar phụ thuộc buildscript sẽ là được tải xuống từ kho tích hợp. [Phụ thuộc bên ngoài của dự án]

ii) tệp jar phụ thuộc cấp gốc sẽ được tải xuống từ gốc kho cấp gốc. [Đối với phụ thuộc dự án]

Ở đây,

Các “buildscript” khối chỉ kiểm soát phụ thuộc cho quá trình buildscript chính nó, không cho mã ứng dụng. Vì các plugin gradle khác nhau như gradle-cobertura-plugin, gradle-lint-plugin được tìm thấy từ bản dựng repos. Các plugin này sẽ không được tham chiếu dưới dạng phụ thuộc cho mã ứng dụng.

Nhưng để biên soạn dự án và chạy thử các tệp jar như groovy all jar, junit and testng jar sẽ được tìm thấy từ các kho cấp gốc.

Và một điều khác, maven { url("https://plugins.gradle.org/m2/") } phần có thể được sử dụng trong cả hai khối. Bởi vì chúng được sử dụng cho các phụ thuộc khác nhau.

Resource Link:Difference between dependencies within buildscript closure and core

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