問題タブ [serviceloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
170 参照

java - Serviceloader から取得したサブクラスが AbstractMethodError をスローする

抽象クラスを実装するプラグインをロードできる Java アプリを作成しようとしていますが、ServiceLoader から生成されたインスタンスで AbstractMethodError が発生しています。コードは少し重いので、以下に簡略化しました。

まず、抽象クラスがあります。

以下のインターフェースを実装します。

meta-inf/services フォルダーにNotAbstractClass拡張して記載するサービス プロバイダーがあります。TheAbstractClass

次に、メイン アプリケーション (実際には別のアプリケーション内のプラグイン) で、拡張するすべてのクラスを見つけたいと思いますTheAbstractClass

私のアプリケーションはNotAbstractClass. forループでできるので、これを知ってclass.getName()いますanotherstuff.NotAbstractClassが、エラーが発生します: java.lang.AbstractMethodError: stuff.TheAbstractClass.getClassName()Ljava/lang/String;

私は困惑しています。なにか提案を?ありがとう、ペドロ

0 投票する
1 に答える
1005 参照

java - pomで依存関係が指定されていない場合、mavenを使用したServiceLoader

ServiceLoaderMaven アプリケーションがあり、このメカニズムを使用してプラグインをロードするのが好きです。

現在、依存関係をpomに追加することでこれを実現しているため、依存関係のjarがクラスパスにあり、ServiceLoaderがそれを取得できます。

しかし、 pom で依存関係を宣言せずにこれをどのように達成できますか?

使用するすべてのプラグインで pom を変更するのは好きではありません。

どうすればこれを行うことができますか、またはプラグイン jar は常に pom にある必要がありますか?

0 投票する
0 に答える
65 参照

java - Java の汎用性とサービス

私のアプリケーションは ServiceLoader を使用しており、Algorithm と Exporter の 2 種類のサービスがあります。コード :

アルゴとエクスポーターを一緒に「配線」する別のクラス Executor があります。

チーム メンバーは、さまざまな種類のアルゴリズムとエクスポーターを個別にコーディングします。彼らはそれをjarに入れ、アルゴリズムまたはエクスポーターのいずれかであるサービスプロバイダーを登録し、アプリケーションのコアはこれらのモジュールを組み合わせることにあります.

私はその小さなテストを書きました:

しかし、私は前途に問題を予見しています。ローダーはアルゴリズムまたはエクスポーターの特定のタイプを認識していないため、2 つの組み合わせが互換性があることをどのように確認できますか? または、アルゴ/エクスポートが機能するタイプに応じて、サービスローダーでサービスをフィルタリングする方法はありますか? ありがとうございます

編集:より明確にするために:誰かがモジュールアルゴリズムをコーディングし、他の人がエクスポーターをコーディングするとしましょう。それらは ServiceLoader で同じ方法でロードされます。それらを区別する方法はありますか?

0 投票する
1 に答える
387 参照

java - Android の ServiceLoader 「クラスをインスタンス化できませんでした」

ServiceLoaderをAndroid アプリに統合して、プラグイン システムを統合する際に問題があります。

externalStorage の assets フォルダーからコピーされた .jar ファイル。クラスはすべてのファイルにアクセスできますが、実行後にクラッシュします。

エラーを解決する方法を知っている人はいますか?

0 投票する
1 に答える
2219 参照

java - ServiceLoader が新しいサービスをロードしない

私の ServiceLoader は私の新しいサービスをロードしたくありません。すべてが正しく設定されていると思います。

Core.Main

Core.service.IService

DbDataBuilder.builder.DbDataBuilder

META-INF/services/service.Iservice

プロジェクトの構造

しかし、実行すると、コンソール出力は次のようになります。

私は何か間違っていますか?

0 投票する
0 に答える
510 参照

neo4j - glassfish4 で hibernate-ogm-neo4j を使用すると、「プロバイダはサブタイプではありません」という例外が発生する

グラスフィッシュ (4.1.1) で hibernate-ogm-neo4j (5.1.0.Alpha1) を実行しようとしています。アプリケーション サーバーを datastorprovider<property name="hibernate.ogm.datastore.provider" value="neo4j_embedded"/>で起動すると、長いスタック トレースが表示され、次の例外が絶えず繰り返されます。

<property name="hibernate.ogm.datastore.provider" value="neo4j_bolt"/>例外を使用すると、

Bolt モードで接続したいのですが、設定を誤ったのか、それとも hibernate-ogm または neo4j のバグなのかわかりません。

これは私の完全なpersistence.xmlです:

アップデート

エラーメッセージをもう少し詳しく調べました。実際にはJavaクラスでスローされ、のようなスーパークラスではないServiceLoaderと言っています。でももちろんそうですorg.neo4j.driver.internal.spi.Connectororg.neo4j.driver.internal.connector.socket.SocketConnector

また、 absolut class name と予想されるパスを含むMETA-INF.services関連の説明もあります。neo4j-java-driver-1.0.4.jarorg.neo4j.driver.internal.connector.socket.SocketConnector

これは私をさらに混乱させます。この構成は自動的に行われないため、Glassfish に適用する必要がありますか?

更新 2

を使用すると問題は解消neo4j-java-driver-1.1.0-M6.jarされます (pom で依存関係を宣言するだけで、hibernate-ogm-neo4j-5.1.0.Alpha1 にバンドルされている 1.0.4 の代わりに使用されます)。バージョン 1.0.x の何が問題なのかはまだわかりませんが、開発者に連絡して確認しました。

0 投票する
2 に答える
1681 参照

java - 別のパスを指す ClassLoader を使用する ServiceLoader

数日からこれを試してきましたが、うまくいきません!

コマンドラインから実行し、別のフォルダーにプラグイン (jar) を提供できるプラグイン可能な Java アプリケーションを構築しようとしています。それはServiceLoader私の要件に合っているようですが、jarがクラスパスの一部ではなく、別の場所に保存されているという特別なケースが必要だと思います。このため、ClassLoderこのファイルシステムへのURLを指すを使用する必要があります道。

メイン アプリケーションに提供したいプラグインの 1 つは、いくつかのカスタム機能を備えたログ jar です。

ここで私が使用しているコードの下にありますが、for/loop に入ることができません..これは、ServiceLoaderクラスの実装を識別/一致させることができないことを意味します:

お役に立てれば幸いです!どうもありがとう

==== プロジェクト ファイルの追加:

主なプラグイン可能なアプリケーション:

ここに画像の説明を入力

「ログ」プラグイン

インターフェイスLog

その実装

  • 構造

ここに画像の説明を入力

=================

プロジェクト構造を次のように調整しましたが、まだ機能しません:

メインアプリ: ここに画像の説明を入力

拡張アプリ: ここに画像の説明を入力