Gradleプラグインの適用の違い


187

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

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

そして他のもの:

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

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


30
Gradleを使用して、同じことを行う2つ以上の方法を見てみましょう。
パウロマーソン2018

7
GradleはビルドシステムのPerlです。
sakra 19/10/23

回答:


178

pluginsブロックは、プラグインを適用する新しい方法であり、それらはで利用可能でなければならないのGradleプラグイン・リポジトリapplyアプローチは、ビルドにプラグインを追加することの古い、まだより柔軟な方法です。

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

機能が進歩するにつれて、plugins構成方法は古いアプローチに取って代わると思いますが、この時点では両方を同時に使用できます。


4
プラグインDSL(plugins {...})を使用してプラグインを適用しても、公式のGradleプラグインリポジトリに公開されていないプライベートプラグインまたは会社のプラグインでは機能しないことに注意してください。そのため、新しいアプローチがプライベートリポジトリでの検索をサポートするまで、古いアプローチが少なくとも存続することを願っています。
Datz

2
pluginsGradleチュートリアル(Gradleバージョン5.6.2)によると、マルチプロジェクトで動作します。guides.gradle.org/ creating -multi-project- builds /…pluginsブロックapply false全体を使用してプラグインをプロジェクト全体に追加しますが、追加しませんそれをルートプロジェクトに追加します。サブプロジェクトは、pluginsブロックを再度使用してプラグインを追加します。
yetsun

pluginsover を使用しても意味がありませんapply plugin
sakra

1
2020年と私はまだ使用していますapply plugin
Blundell

これは絶対にひどいもので、構文と入力がまったく異なる2つのディレクティブに加えて、互換性がありません。Gradleは、JavaとKotlinを使用する際の最大の苦痛です。
クリスチャン

57

@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'
    }
}

このバージョンはもう必要ないことに注意してください。バージョンがで必要とされるplugins次のような、コアのGradleプラグインのいずれかを使用している場合を除きブロックjavascala...

私はSpring Bootアプリケーションを作成しようとしている間、その違いを理解するのに少し時間を費やしました。それが私がしばらくしてもう一度これに答えている理由です。Spring Bootプラグインを使用するための次の例は、私を大いに助けました:

現在使用すべきもの:

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"

これはどういうわけか間違った印象を与えます。一つは、単純に変換することはできませんapply plugin xxxplugins { id xxx }(私はそれを試してみましたが、それはうまくいきませんでした)
クリスチャン・

私は答えと引用されたドキュメントがこれを明確に述べていると思います。これはあなたのケースに依存します。ケースに関する詳細情報を提供するか、これを別の質問に投稿できます。
Mousa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.