web-dev-qa-db-ja.com

カスタムGradleプラグインIDが見つかりません

Gradleプラグインを書いていますが、プラグインを使用するGradleスクリプトでapply plugin:コマンドを機能させることができません。 Gradle 1.1を使用しています。

プラグインをclean buildでビルドしましたが、今のところ、フラットリポジトリを介してGradleビルドに追加しようとしています。これは機能しているようですが、Gradleはtest-pluginというIDのプラグインがあることを認識していません。プラグインのsettings.gradleのプロジェクト名はtest-pluginであり、META-INF/gradle-pluginsのプロパティファイルもtest-plugin.propertiesです。プラグインIDを指定できる他の場所がわかりません。

gradle.buildを使用しているプロジェクトのtest-pluginファイル:

repositories {
  flatDir name: 'libs', dirs: "../build/libs"
}

dependencies {
  compile 'test:test-plugin:0.1'
}

apply plugin: 'test-plugin'

Gradleからのエラー:

What went wrong:
A problem occurred evaluating root project 'tmp'.
Plugin with id 'test-plugin' not found.
24
Patrick Auld

プラグインJarをビルドスクリプトの依存関係として追加する必要があります。

buildscript {
    repositories { flatDir name: 'libs', dirs: "../build/libs" }
    dependencies { classpath 'test:test-plugin:0.1' }
}

apply plugin: "test-plugin"
23

プラグインをビルドスクリプトに実装する場合、2つのオプションがあります。

オプション1
apply plugin: YourCustomPluginClassName

オプション2
plugins { id 'your.custom.plugin.id' }

apply plugin:は、クラス名でプラグインを指定するときに使用されます(例:apply plugin: JavaPlugin
plugins { }は、プラグインをそのIDで指定するときに使用されます(例:plugins { id 'Java' }
参照用 tutorialspointによるGradleプラグイン を参照

オプション1を選択した場合、カスタムプラグインを3つの方法のいずれかでビルドスクリプトに取り込む必要があります。
1。 Gradleビルドスクリプト内で直接コーディングできます。
2。 buildSrc(例:buildSrc/src/main/groovy/MyCustomPlugin)。
3。カスタムプラグインをbuildscriptメソッドのjarとしてインポートできます。
buildscriptメソッドの詳細については、 Haki氏によるGradle Goodness を参照してください。

オプション2を選択した場合、プラグインIDを作成する必要があります。次のファイルを作成しますbuildSrc/src/main/resources/META-INF/gradle-plugins/[desired.plugin.id] .properties。コピーアンドペースト implementation-class=desired.plugin.idを新しく作成した。propertiesファイルに追加します。置換desired.plugin.id希望のプラグインIDを使用します。
詳細については、 Gradleによるカスタムプラグイン を参照してください。

4
Region39

カスタムプラグインIDが見つからないという問題もありました。私の場合、「src/main/resources/META-INF/gradle-plugins」プロパティファイルを追加するのを忘れていました。プロパティファイルの名前は、「。properties」拡張子を持つプラグインIDの名前と一致する必要があります。

ファイルには次の行が含まれている必要があります。

implementation-class=(your fully qualified plugin classpath)

これが、プラグインIDがクラス名に解決される方法の完全なメカニズムです。

さらに、前の回答で指摘したように、プラグインを依存関係として追加する必要があります。 Androidのドキュメントでは、一意のドメイン名に関連付けられた名前を使用する必要があると記載されています。 .gradle.test-plugin 'の方が良いでしょう。

1
tom