2014-10-07 18 views
17

Trước Gradle 2.1 tôi có thể áp dụng plugin để tất cả các dự án bằng cách sử dụng allProjects đóng cửa (bằng prevoisly giải quyết jar, tất nhiên):Làm thế nào để áp dụng plugin cho allprojects với cơ chế bổ sung Gradle mới?

buildscript { 
    repositories { 
    jcenter() 
    } 
    dependencies { 
    classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1" 
    } 
} 

allprojects { 
    apply plugin: "com.jfrog.artifactory" 
} 

Với cơ chế xuất bản mới có vẻ như plugins đóng cửa không thể được sử dụng bên trong allprojects:

allprojects { 

    plugins { 
     id "com.jfrog.artifactory" version "3.0.1" 
    } 
} 

không thành công với:

"không thể tìm thấy phương pháp bổ sung() cho các đối số [build_ xxxx_run_closure1_closure4 @ yyyyy] trên dự án gốc "

Quy tắc sử dụng mã số plugins là gì? Plugin có được áp dụng cho dự án hiện tại không? Nếu vậy, làm thế nào tôi có thể áp dụng nó cho tất cả các dự án mà không lặp lại việc đóng cửa plugins bên trong mỗi công trình?

Trả lời

23

Không thể sử dụng cú pháp mới plugins {...} trong phạm vi số allprojects {...} hoặc subprojects {...}. Ngoài ra, nó chỉ có thể được sử dụng trong các kịch bản xây dựng (không có plugin script, init script, vv). Nếu bạn muốn tránh phải áp dụng các plugin cho từng dự án riêng lẻ tôi khuyên bạn nên sử dụng ký pháp cũ. Đây là vấn đề mà nhóm Gradle biết và giải pháp sẽ được giới thiệu trong các phiên bản sau.

Cập nhật: Bắt đầu với Gradle 3.0, bạn có thể thực hiện việc này theo cách hơi được sửa đổi. Bạn vẫn phải sử dụng rõ ràng apply() nhưng bạn không còn phải đối phó với tất cả các số vô nghĩa buildscript { } để nhận plugin trên đường dẫn lớp của mình. Điều này cũng cho phép bạn áp dụng điều kiện các plugin. Hãy xem Gradle 3.0 release notes để biết thêm thông tin.

plugins { 
    id 'my.special.plugin' version '1.0' apply false 
} 

allprojects { 
    apply plugin: 'java' 
    apply plugin: 'my.special.plugin' 
} 
+0

Cú pháp đóng cửa mới là cách duy nhất để thực hiện công việc plugin sonarqube và không thể tạo cú pháp đóng mới plugin cho dự án của tôi vì lỗi trên. Không có gì lạ khi các ngôn ngữ JVM có được một cái tên xấu cho cơ sở hạ tầng nghèo nàn cho những thứ cơ bản như vậy. Lưu ý: - Trong trường hợp của tôi, việc đóng trình cắm nằm ngoài tất cả các đoạn mã ngay sau mã áp dụng plugin cũ. – Avik

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