【解決方法】別のプラグイン (Maven 依存関係) のインターフェイスを使用すると、noclassdeffounderror がスローされます (confluence プラグイン)

プログラミングQA


現在、次の問題に悩んでいます。プラグイン (PLUGIN A) で、別のプラグイン (PLUGIN B) に由来するインターフェイスを使用する必要があります。 私は PLUGIN B の開発者でもあるので、(必要に応じて) コードを変更できます。

私がこれまでにやったこと:

1. 次のコマンドを使用して、パッケージ化された jar を PLUGIN B からローカル Maven リポジトリに追加しました。

mvn install:install-file -Dfile=plugin-b.jar \
    -DgroupId=com.my.plugin.b -DartifactId=plugin-b \
    -Dversion=1.0.0 \
    -Dpackaging=jar

2. その後、プラグイン A の POM に依存関係として追加しました。

<dependency>
            <groupId>com.my.plugin.b</groupId>
            <artifactId>plugin-b</artifactId>
            <version>1.0.0</version>
            <scope>provided</scope>
        </dependency>

これもプラグインが構築されている限り機能しており、インターフェイスのインポートを行うことができます。

import com.my.plugin.b.interfaces.MyInterface;

すべてのコード補完機能を備えた IDE (IntelliJ) でも使用できます。 プラグインがサーバーにインストールされていない (要件が見つからない) という問題がまだありましたが、これをプラグイン A の POM (「confluence-package」タグ内) に追加することで解決できました。 maven-プラグイン”:

com.my.plugin.b.*;resolution:="optional",

しかし、パッケージ化されたバージョンの PLUGIN A を Confluence インスタンスにインストールすると、コードの実行に関して次のエラーがログに記録されます。

java.lang.NoClassDefFoundError: com/my/plugin/b/interfaces/MyInterface

どうすればこれを修正できるかわかりません。 もちろんサーバーを再起動し、プロジェクトに「mvn clean package」を作成しました。

また、PLUGIN Bを指す依存関係でスコープ「compiled」を使用しようとしましたが、プラグインはサーバー上で何も行わず、次のようないくつかのSpring関連の例外でクラッシュします。

getInstance Unable to create new reference LazyLoadedFilterReference{descriptor=com.my.plugin.b:rest-filter (null), filterConfig=com.atlassian.plugin.servlet.filter.PluginFilterConfig@82ha2js}

おそらく、プラグイン B から派生し、スプリング スキャナ アノテーションを使用してプラグイン A で使用されている他の多くのサービス/コンポーネントで問題が発生したためです。

それで、何をすべきか、何を確認すべきか、またはこの問題をどのように解決できるかについて考えを持った人はいますか?

この問題に関する追加の背景情報 (詳細は省略して説明します): PLUGIN A では、コードはサードパーティのプラグインからのサービスによってオブジェクトを取得しています (私の責任ではないため、コードにはアクセスできません)。 場合によっては、このサービスによって返されるオブジェクトは、PLUGIN B によって提供されるため、「MyInterface」タイプのオブジェクトになります。また、いくつかの計算のために、「MyInterface」で定義されているように、このオブジェクトとそのメソッドにアクセスする必要があります。 また、PLUGIN Aで同じインターフェイスを作成してキャストしようとしましたが、これはすべて機能しません。

おそらくこの情報は、私の問題に対する別の解決策を見つけるのに役立つでしょう。

それで、何をすべきか、何を確認すべきか、またはこの問題をどのように解決できるかについて考えを持った人はいますか?

前もって感謝します!

私が試したこと:

すでに問題文に記載されています。 🙂

コメント

タイトルとURLをコピーしました