web-dev-qa-db-ja.com

gradleプラグインを適用することの違い

Gradleプラグインブロックがわかりません

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

そして他のもの:

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

最初のブロックにはプラグイン名があります。 2番目のパッケージとバージョン。最初のブロックを使用する場所と、2番目のブロックを使用する場所がわかりません。

110
Yevgen Kulik

pluginsブロックは、プラグインを適用する新しい方法であり、 Gradleプラグインリポジトリ で利用可能である必要があります。 applyアプローチは、ビルドにプラグインを追加するためのより古く、より柔軟な方法です。

新しいpluginsメソッドは、マルチプロジェクト構成(subprojectsallprojects)では機能しませんが、各子プロジェクトのビルド構成では機能します。

機能が進むにつれて、plugins構成メソッドは古いアプローチを追い越すと思いますが、この時点で両方が同時に使用でき、同時に使用されます。

121
cjstehno

@cjstehnoで既に述べたように、apply pluginは古いメソッドであり、避けるべきです。

プラグインDSLの導入により、ユーザーはプラグインを適用する従来の方法を使用する理由をほとんど持たないはずです。ビルドの作者が現在の動作の制限のためにプラグインDSLを使用できない場合に備えて、ここに文書化されています。

新しいplugins blockメソッドを使用すると、オプションのパラメーターapplyを使用して、プラグインを追加し、いつ適用するかを制御できます。

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

pluginsブロックに既に追加されているが適用されていないプラグインを適用する状況では、引き続きレガシーメソッドを使用します。たとえば、マスタープロジェクトにプラグインxyzが追加されますが、適用されません。サブプロジェクトsubProにのみ適用する必要があります。

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

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

このバージョンはもう必要ないことに注意してください。 pluginsJavaなどのCore Gradleプラグインのいずれかを使用している場合を除き、scalaブロックにはバージョンが必要です。

私はSpring Bootアプリケーションを作成しようとする際に違いを理解するのに少し時間を費やしました。それがしばらくして再び答えている理由です。 Spring Boot plugin を使用する次の例は、非常に役立ちました。

現在何を使用すべきか:

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

Gradle 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"
29
Mousa