問題タブ [maven-scr-plugin]
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.
servlets - OSGi 宣言型サービス インジェクション
ローカルの Glassfish サーバーで Declarative Services を使用して単純な OSGi サービスを実行しようとしています。提供するプラグインは常にアクティブです。
サービスを消費するサーブレットへの注入で問題が発生しました。サービス参照が注入されたオブジェクトと同じオブジェクトではないため、サーブレットが呼び出されると参照が null になります。
参照セッターにブレークポイントを設定してテストしたところ、サービスが注入されていることがわかりましたが、サーブレットをアプリケーションに呼び出すボタンをクリックすると、サービス参照は同じオブジェクトではないため null になります (つまり、取得します)。 servlet_Instance #1 に注入されますが、servlet_Instance #2 でメソッドを呼び出します.実行時にサービスを見つけて使用できるため、少し詳細が欠けているに違いありません
XML ファイルの生成に使用するプラグイン: maven-scr-plugin
これは私のサービスクラスです
生成された XML は
私のサーブレットは
生成された XML
また、Peter Kriens がそこに書いたように、サーブレットが見つからないように見えるため (エラー 404 - 要求されたリソース () は利用できません)、運がありませんでした: OSGi HTTP サービスから OSGi サービスを消費する方法
そこで、サーブレットを次のように変更しました。
生成された XML は
JSP からサーブレットにアクセスします
上記をテストするために、投稿と同じように、デプロイされたバンドル org.apache.felix.http.api-2.2.1、org.apache.felix.http.whiteboard-2.2.1 に含まれています。装着するスイッチがあるかどうかはわかりませんでした。
また、org.apache.felix.webconsole-4.2.0-all バンドルを確認したところ、サービスが稼働中であり、コンシューマー バンドルがそれを使用していると表示されます。
aem - maven-scr-plugin が SCRDescriptorException 「ファイルをスキャンできません ... クラス ファイル形式はおそらく ASM でサポートされていませんか?」で失敗します。
次の依存関係を使用します(とりわけ、バンドルは AEM 6.1 にインストールされることになっています)。
ランタイムはjava8
- maven-scr-plugin 1.15.0
- org.apache.felix.scr.annotations: 1.9.8
- org.apache.felix.scr.ds-注釈: 1.2.8
この例外が発生します
原因: org.apache.felix.scrplugin.SCRDescriptorException: クラス ファイルをスキャンできません: ... (クラス ファイル形式はおそらく ASM でサポートされていませんか?) org.apache.felix.scrplugin.helper.ClassScanner.processClass(ClassScanner. java:219) org.apache.felix.scrplugin.helper.ClassScanner.process(ClassScanner.java:161) で org.apache.felix.scrplugin.helper.ClassScanner.scanSources(ClassScanner.java:146) で org.apache .felix.scrplugin.SCRDescriptorGenerator.execute(SCRDescriptorGenerator.java:146) at org.apache.felix.scrplugin.mojo.SCRDescriptorMojo.execute(SCRDescriptorMojo.java:221) ... 22 詳細
原因: org.objectweb.asm.ClassReader での java.lang.IllegalArgumentException。(不明なソース) org.objectweb.asm.ClassReader で。(不明なソース) org.objectweb.asm.ClassReader で。(不明なソース) org. apache.felix.scrplugin.helper.ClassScanner.processClass(ClassScanner.java:201)
問題のクラスには osgi アノテーションがまったく含まれていませんが、他の @Component アノテーションが付けられたクラスにインポートされているだけです。
誰かがこれに遭遇し、解決策を見つけましたか?
osgi - Maven SCR プラグイン リファレンス アノテーション ターゲット属性の使用法
以下に示すように、@Reference の「ターゲット」属性を使用して、利用可能な実装を除外できます。
@Reference(target="(k1=v1)") ISomeServiceContract svc1;
私の質問はフィルター値についてです。ドキュメントにはそれについてほとんど書かれておらず、私は混乱しています。
http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#referenceは、「ターゲット」属性について次のように述べています。
「利用可能にする特定のサービスを選択するためのサービス ターゲット フィルター」。
SCR プラグインのフィルター値には特定の構文がありますか (つまり、キーと値の指定を括弧で囲む必要があるのはなぜですか)? 「(k1=v1&&k2=v2)」や「(k1=v1||k2=v2&&(...))」などを指定できますか。
java - シンプルな AEM アプリケーションで WCMUsePojo を使用すると java.lang.VerifyError が発生する
mvn clean install
以下は、プロジェクトの実行時に発生するエラーです。これは、WCMUse を使用しようとしている AEM 6.1 の単純な AEM アプリケーションです。
以下は、WCMUsePojo を使用しているコードです。
extends WCMUsePojo を削除すると、エラーは発生せず、ビルドは正常に実行されます。
私が使用しているpomの下を見つけてください:
osgi - maven-scr-plugin と OSGI R6 アノテーションを使用してメタタイプの説明を生成する
コンポーネントとメタタイプの説明を生成するために maven-scr-plugin を使用しています。org.apache.felix.scr アノテーションから org.osgi.service.component アノテーションに移行しています。
Carsten Ziegeler は、この移行の方法について優れたブログをここに書いています。ただし、メタタイプの説明をコンポーネントの注釈から直接生成する方法については説明していません。代わりに、コンポーネントごとに個別の構成 @interface を作成し、すべてのコンポーネント アクティベーターを書き直す必要があります (少なくとも、追加の @interface クラスの付加価値を利用するには)。
への依存関係を追加することで、引き続き maven-scr-plugin を使用して osgi アノテーションを処理できますorg.apache.felix.scr.ds-annotations
。ただし、maven-scr-plugin は、メタタイプ情報が明示的にオンになっている場合にのみ出力します。felix アノテーションを使用すると、メタタイプの生成を有効にするためにアノテーションの専用パラメーターmetatype=true
を使用できます。ただし、そのようなパラメーターは、アノテーション@Component
の OSGi バージョンでは使用できません。@Component
maven-scr-plugin にメタタイプの説明を強制的に生成させる方法はありますか、または maven-bundle-plugin (または bndtools) を作成して、osgi @Component アノテーションに基づいてメタタイプ データを生成することはできますか?すべてのコンポーネントに専用の構成クラス?
java - Maven-src-plugin & Java 11 - クラスファイルをスキャンできません:
Java 11 および Sling 11 で実行するようにプロジェクトのセットアップをアップグレードしようとしています。列挙型のみを含む単純なクラスをスキャンできなくなります。
Maven プロジェクトをビルドしようとしたときに発生するエラーは次のとおりです。
そして、これが私のPOMファイルのほとんどです(機密情報は削除されています):
私は少しの間トラブルシューティングを行ってきましたが、scr-plugin は最新の maven-compiler をサポートしていないということを理解しています。これは、一方が他方よりも数か月前にリリースされたためです (以下のリンクを参照)。
誰かが同様の問題に遭遇し、回避策を見つけたのではないかと思っていました。ありがとうございました!