Was ist der Unterschied bei der Anwendung von Gradle Plugin

183

Ich verstehe Gradle Plugins Block nicht

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

und andere:

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

Im ersten Block haben wir einen Plugin-Namen. im zweiten Paket und Version. Ich verstehe nicht, wo ich den ersten Block verwenden soll und wann der zweite.

Jewgen Kulik
quelle
30
Machen Sie sich mit Gradle bereit, 2+ Möglichkeiten zu sehen, um dasselbe zu tun!
Paulo Merson
5
Gradle ist das Perl der Build-Systeme.
Sakra

Antworten:

174

Der pluginsBlock ist die neuere Methode zum Anwenden von Plugins und muss im Gradle-Plugin-Repository verfügbar sein . Der applyAnsatz ist die ältere und dennoch flexiblere Methode zum Hinzufügen eines Plugins zu Ihrem Build.

Die neue pluginsMethode funktioniert nicht in Konfigurationen mit mehreren Projekten ( subprojects, allprojects), sondern in der Build-Konfiguration für jedes untergeordnete Projekt.

Ich würde denken, dass mit fortschreitender Funktionalität die pluginsKonfigurationsmethode den älteren Ansatz überholen wird, aber an diesem Punkt können und werden beide gleichzeitig verwendet.

cjstehno
quelle
4
Beachten Sie, dass das Anwenden eines Plugins mit den Plugins DSL ( plugins {...}) nicht für Ihre privaten Plugins oder Firmen-Plugins funktioniert, die nicht im offiziellen Gradle-Plugin-Repo veröffentlicht sind. Deshalb hoffe ich, dass der alte Ansatz zumindest so lange überlebt, bis der neue die Suche in privaten Repositories unterstützt.
Datz
2
pluginsfunktioniert in mehreren Projekten gemäß Gradle-Tutorial (Gradle-Version 5.6.2) guide.gradle.org/creating-multi-project-builds/… Es verwendet pluginsBlock mit apply false, um das Plugin zum Gesamtprojekt hinzuzufügen, fügt es jedoch nicht hinzu es zum Stammprojekt. Das Teilprojekt verwendet pluginserneut Blöcke, um das Plugin hinzuzufügen.
Yetsun
Es macht wirklich keinen Sinn, pluginsover zu verwenden apply plugin.
Sakra
1
2020 und ich benutze immer nochapply plugin
Blundell
Das ist absolut schrecklich, zwei Direktiven mit völlig unterschiedlicher Syntax und Eingaben, die darüber hinaus inkompatibel sind. Gradle ist bei Verwendung von Java und Kotlin bei weitem der größte Schmerz im Nacken.
Christian
56

Wie bereits von @cjstehno erwähnt, apply pluginist dies eine Legacy-Methode, die Sie vermeiden sollten.

Mit der Einführung der Plugins DSL sollten Benutzer wenig Grund haben, die Legacy-Methode zum Anwenden von Plugins zu verwenden. Es wird hier dokumentiert, falls ein Build-Autor die Plugins DSL aufgrund von Einschränkungen in der aktuellen Funktionsweise nicht verwenden kann.

Mit der neuen plugins blockMethode können Sie ein Plugin hinzufügen und mithilfe eines optionalen Parameters steuern, wann es angewendet werden soll apply:

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

Sie würden die Legacy-Methode weiterhin in Situationen verwenden, in denen Sie ein bereits hinzugefügtes, aber nicht angewendetes Plugin in Ihrem pluginsBlock anwenden möchten . Beispielsweise wird im Masterprojekt ein Plugin xyzhinzugefügt, aber nicht angewendet, und es sollte nur in einem Teilprojekt angewendet werden subPro:

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

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

Beachten Sie, dass Sie die Version nicht mehr benötigen. Die Version wird in dem gewünschten pluginsBlock , wenn Sie eine des Kern Gradle Plugins verwenden, wie zum Beispiel java, scala...

Ich habe einige Zeit damit verbracht, den Unterschied zu verstehen, während ich versucht habe, eine Spring BootAnwendung zu erstellen , und deshalb beantworte ich dies nach einer Weile erneut. Das folgende Beispiel für die Verwendung des Spring BootPlugins hat mir sehr geholfen:

Was sollte aktuell verwendet werden:

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

Was wurde vor Gradle 2.1 verwendet:

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"
Mousa
quelle
Das macht irgendwie den falschen Eindruck. Man kann nicht einfach konvertieren apply plugin xxxzu plugins { id xxx }(ich habe es versucht und es hat nicht funktioniert)
Christian
Ich denke, die Antwort und die zitierte Dokumentation geben dies deutlich an. Dies hängt von Ihrem Fall ab. Sie können weitere Informationen zu Ihrem Fall bereitstellen oder diese in einer anderen Frage veröffentlichen.
Mousa