Sự khác biệt trong việc áp dụng plugin gradle


187

Tôi không hiểu khối bổ trợ gradle

apply plugin: 'someplugin1'
apply plugin: 'maven'

và một cái khác:

plugins {
   id 'org.hidetake.ssh' version '1.1.2'
}

Trong khối đầu tiên Chúng tôi có một số tên plugin. trong gói thứ hai và phiên bản. Tôi không hiểu tôi nên sử dụng khối thứ nhất ở đâu và khi nào khối thứ hai.


30
Với Gradle, hãy sẵn sàng để xem hơn 2 cách để làm điều tương tự!
Paulo Merson

7
Gradle là Perl của các hệ thống xây dựng.
Luân xa

Câu trả lời:


178

Các pluginskhối là phương pháp mới áp dụng plugin, và họ phải có sẵn trong kho plugin Gradle . Cách applytiếp cận là phương pháp cũ hơn nhưng linh hoạt hơn để thêm plugin vào bản dựng của bạn.

pluginsPhương thức mới không hoạt động trong các cấu hình đa dự án ( subprojects, allprojects), nhưng sẽ hoạt động trên cấu hình xây dựng cho từng dự án con.

Tôi nghĩ rằng khi chức năng tiến triển, pluginsphương pháp cấu hình sẽ vượt qua cách tiếp cận cũ hơn, nhưng tại thời điểm này cả hai đều có thể và được sử dụng đồng thời.


4
Xin lưu ý rằng việc áp dụng plugin bằng plugin DSL ( plugins {...}) không hoạt động đối với các plugin riêng hoặc plugin công ty không được xuất bản cho repo plugin Gradle chính thức. Đó là lý do tại sao tôi hy vọng phương pháp cũ ít nhất sẽ tồn tại cho đến khi phương pháp mới hỗ trợ tìm kiếm trong kho riêng.
Datz

2
pluginshoạt động trong nhiều dự án, theo hướng dẫn của Gradle (phiên bản Gradle 5.6.2) guide.gradle.org/creating-multi-project-builds/ trộm Nó sử dụng pluginskhối với apply falseđể thêm plugin vào tổng thể dự án, nhưng không thêm nó đến dự án gốc. Tiểu dự án sử dụng pluginscác khối một lần nữa để thêm plugin.
yetsun

Thực sự không có điểm trong việc sử dụng pluginshơn apply plugin.
Luân xa

1
2020 và tôi vẫn đang sử dụngapply plugin
Blundell

Điều này là hoàn toàn khủng khiếp, hai chỉ thị với cú pháp và đầu vào hoàn toàn khác nhau, trên hết là không tương thích. Gradle là nỗi đau lớn nhất ở cổ khi sử dụng Java và Kotlin.
Christian

57

Như đã được đề cập bởi @cjstehno, đây apply pluginlà một phương pháp kế thừa mà bạn nên tránh.

Với việc giới thiệu các plugin DSL, người dùng sẽ có ít lý do để sử dụng phương pháp kế thừa áp dụng các plugin. Nó được ghi lại ở đây trong trường hợp tác giả bản dựng không thể sử dụng các plugin DSL do những hạn chế trong cách thức hoạt động của nó.

Với plugins blockphương pháp mới , bạn có thể thêm plugin và kiểm soát thời điểm áp dụng nó bằng tham số tùy chọn apply:

plugins {
    id «plugin id» version «plugin version» [apply «false»]
}

Bạn vẫn sẽ sử dụng phương pháp cũ trong các tình huống bạn muốn áp dụng một plugin đã được thêm nhưng chưa được áp dụng trong pluginskhối của mình . Ví dụ, trong dự án chính, một plugin xyzđược thêm nhưng không được áp dụng và nó chỉ được áp dụng trong một tiểu dự án subPro:

plugins {
  id "xyz" version "1.0.0" apply false
}

subprojects { subproject ->
    if (subproject.name == "subPro") {
        apply plugin: 'xyz'
    }
}

Lưu ý rằng bạn không cần phiên bản nữa. Các phiên bản được yêu cầu trong pluginskhối, trừ khi bạn đang sử dụng một trong những plugin lõi Gradle, chẳng hạn như java, scala, ...

Tôi đã dành một chút thời gian để hiểu sự khác biệt trong khi cố gắng tạo một Spring Bootứng dụng và đó là lý do tại sao tôi sẽ trả lời lại điều này sau một thời gian. Ví dụ sau để sử dụng Spring Bootplugin đã giúp tôi rất nhiều:

Những gì hiện nên được sử dụng:

plugins {
  id "org.springframework.boot" version "2.0.1.RELEASE"
}

Những gì đã được sử dụng trước Lớp 2.1:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE"
  }
}

apply plugin: "org.springframework.boot"

Điều này bằng cách nào đó cho ấn tượng sai. Người ta không thể chuyển đổi đơn giản apply plugin xxxthành plugins { id xxx }(Tôi đã thử và nó không hoạt động)
Christian

Tôi nghĩ rằng câu trả lời và tài liệu trích dẫn nêu rõ điều này. Điều này phụ thuộc vào trường hợp của bạn. Bạn có thể cung cấp thêm thông tin về trường hợp của bạn hoặc đăng điều này trong một câu hỏi khác.
Mousa
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.