【gradle】原因: groovy.lang.MissingMethodException: メソッドのソリューションとチェックメソッドの署名がありません

【gradle】原因: groovy.lang.MissingMethodException: メソッドのソリューションとチェックメソッドの署名がありません

最近、gradle プラグインを作成するときにこのエラーを報告しました。インターネットで検索しても体系的なチェック方法がないため、このエラーを解決するときに遭遇した落とし穴を記録します。このエラーが発生した場合の主な問題は、間違いなく、このメソッドに関連するスクリプトのメソッド呼び出しまたは環境構成
ここに画像の説明を挿入します
に問題があることです。したがって、この考え方に沿って、以下の問題を個別に検討します。

メソッド呼び出しによって発生するエラー

  1. メソッド呼び出し時にエラーはありますか? 最も低レベルのエラーは、呼び出されたメソッド名がスクリプトに記述されたメソッド名と一致しないことです。この考え方に従って、単語の大文字と小文字の区別とスペルをこの順序で確認してください。
  2. 階層構造の問題とは、スクリプトメソッドの階層構造が間違っており、その結果、対応するメソッドを呼び出せなくなることです。
    一般に、このような問題が発生した場合は確認するのが簡単ですが、このような低レベルのエラーの存在を無視しないでください。

環境設定に起因するエラー

この種の問題の解決策はより複雑であり、慎重な検討が必要です。ここも回ってみました(はっきり言ってグラドルはまだ苦手ですorz)

チェックポイント1:再梱包は必要ですか?

前任者によって書かれたスクリプトを書き直す場合、そのスクリプトのソース コードがプロジェクトに配置されているだけで、実際に依存するプラグインがすでにリモート ウェアハウスにリリースされている依存関係である可能性があります (私の落とし穴の 1 つ)。

したがって、テストしたい場合は、必要に応じて、変更したプラグイン コードを jar パッケージに再パッケージ化できます。
Jar パッケージ リファレンス: Gradle プロジェクトのリリース

jar パッケージが完成したら、プロジェクトを構成し、ローカル ウェアハウスに対応するプラグインの依存関係を導入します。

チェックポイント 2: プラグインの依存関係に同じ名前がある

プロジェクトでは、リモート ウェアハウスからのプラグインの依存関係が導入されることがよくありますが、このとき、名前が重複するプラグインの依存関係の問題を解決する必要があります。

単なるプラグイン バージョンの競合の場合: ローカル ウェアハウスのプラグイン バージョンがリモート ウェアハウスでリリースされているため、バージョン番号をリセットする必要があります。

プラグインがリモート ウェアハウスから呼び出される場合、解決策は 2 つあります。

1 つ目の方法は、ウェアハウスとプラグインを対応するリポジトリと依存関係の先頭に記述する方法です。この方法では、リモート ウェアハウス プラグインを参照する元のプロジェクトのコードを書き換えることはできず、デバッグされたプラグインを確実に実行できます。 -in は後でリモート ウェアハウスにリリースすることもできます。元のプロジェクトは使用したままにしてください。

ローカルウェアハウスを前面にアンインストールする

次に、元のコードで参照されている同じ名前の依存関係をコメント アウトします。

チェックポイント 3: 依存関係を追加する場所

元のプロジェクトに依存関係が導入されている場所が settings.gradle または build.gradle にあるかどうかを確認してください (私の間違いはポイント 2 です)。同期中に AS によって実行される構成シーケンスは次のとおりです。

  1. 設定.グラード
  2. プロジェクト build.gradle
  3. APPのbuild.gradle

したがって、最初にリモート ウェアハウスに同じ名前のプラグインが settings.gradle に追加されているかどうかを確認し、チェックポイント 2 のようにリモート ウェアハウスの前にローカル ウェアハウスの依存関係とプラグインを追加する必要があります。それ以外の場合は、build.gradle または設定にある場合でも、ローカル ウェアハウスの依存関係が .gradle の後半に追加された場合、リモート ウェアハウスの元のプラグインが最初に使用され、メソッドの追加または変更が発生します。 (リモート ウェアハウスからプラグインを導入しているため、当然それらは使用できません。ローカル ウェアハウスにメソッドを変更しました)。

ここで、AS は build.gradle 内のローカル ウェアハウス依存関係が存在するかどうかを引き続きチェックしますが、それを呼び出さないことに注意してください。

要約する

この問題の主な理由は、Android 学習の初心者である私が gradle の呼び出しシーケンスに慣れていないことです。記事に間違いがある場合は、ぜひご指摘ください。また、この問題に関する他の問題について一緒に議論することも歓迎です。

おすすめ

転載: blog.csdn.net/HanLiangJ/article/details/125300279