問題タブ [reflections]

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 投票する
5 に答える
2485 参照

java - Reflections google ライブラリを使用した単体テストは、Maven によって実行された場合にのみ失敗します

クラスパス内の特定のリソースを照会するために Google Reflections ライブラリを使用しています。これらのリソースは、プロジェクトのクラスと同じ場所にあります。

Eclipse で単体テストとして実行すると成功する単体テストをいくつか作成しましたが、Maven で (maven installたとえば a を使用して) 実行しようとすると、期待どおりに動作しません。いくつかのデバッグの後、明らかに問題は、Maven で実行すると、リフレクション ライブラリがリソースが配置されているクラスパス URL を見つけられないことです。

Reflections が検査する必要があるクラスパス URL をどのように決定するかを調査して、その結論に達しました。例として、次のメソッドは、Reflections が指定されたクラス ローダーで利用可能なクラスパス URL を見つける方法を示しています (元の Reflections メソッドは少し簡略化されています)。

つまり、個々のクラスローダーの URL を求めて、クラスローダー階層をトラバースしています。

Eclipse では、単体テストから前のメソッドを次のように呼び出します。

予想どおり、(他の多くの URL の中でも) プロジェクトの一部として構成されているクラスパス URL を確認できます。

Reflections はチャームとして機能します (Reflections が見つけるリソースは にありますfile:<MY_PROJECT_PATH>/target/classes/)。

しかし、Maven でテストを実行すると、これらの URL エントリがforClassLoaderメソッドによって返されたセットに含まれていないことに気付きました。また、残りの Reflections メソッドがこの問題に対して期待どおりに機能していません。

「驚くべき」ことは、単体テストがmavenによって実行されたときにこれを書くと:

検索しようとしているリソースをクラスローダーが引き続き解決できることがわかります。Maven で実行したときforClassLoaderに、返されたプロジェクトのクラスパス URL のセットにメソッドが含まれないのはなぜでしょうか。同時に、そのような URL にあるリソースを解決することもできます (!)。

この動作の理由は何ですか? Maven によって実行される単体テストの一部として呼び出されたときに Reflections ライブラリを機能させるために試みることができる回避策はありますか?

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

java - jarInputStream.getManifest() が null です

jar ファイルをサーブレットにアップロードし、そのマニフェストを読み取ろうとすると。jarStream.getManifest() は null を返します..

JarInputStream jarInputStream = new JarInputStream(inputStream);

マニフェスト mf = jarInputStream.getManifest();

絶対パスを提供する JarFile として読み取ると同じ jar ですが、jar のマニフェストを取得します。

実行時にjarファイルのマニフェストを読み取る必要があります..アップロード時に..

どんな提案でも大歓迎です..

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

java - サーブレットを介して動的にアップロードされる jar からのクラスのロード

サーブレットを介して jar を動的にアップロードし、WEB-INF/lib ディレクトリに保存しています。@annotation で注釈を付けたすべてのクラスを取得したいのですが、

以下のリフレクション コードを使用して運が悪かった.. jar のマニフェストは読み取り可能ですが、クラスはそうではありません.. クラスのリストは 0 です

構成にどのような変更を加えると、動的にアップロードされる jar からクラスを取得するのに役立ちますか..

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

import - JarライブラリがIntelijIDEA内で認​​識されない

やあ!私はintelijIDEAを初めて使用しますが、GoogleリフレクションライブラリをintelijIDEA内で動作させることができません。モジュール構成に移動し、次に依存関係に移動し、ライブラリの追加アイコンをクリックしてjarファイルを指定することにより、多くのサイトで推奨として追加しようとしました。エディターでは認識されますが(赤で下線が引かれていません)、問題を実行しようとするとスローされるjava.lang.NoClassDefFoundError: com/google/common/base/Predicate ため、インポートが機能しなかったと推測されます。助けてくれてありがとう。

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

java - Google Reflectionsを使用してすべてのクラスのリストを取得しますが、java。*が欠落しているようです

私はグーグルリフレクションパッケージを使用して、呼び出すことができるすべてのクラスのインデックスを作成しています。次のコードは、JVMにロードされているすべてのクラスを返すことになっています。

返されるセットには、java。*ドメインには何も含まれていないことに注意してください。Reflectionsパッケージに精通している人が、これらを入手する方法についてアドバイスしてもらえますか?ありがとう!

0 投票する
4 に答える
1599 参照

java - null 要素を持つ Set を返すリフレクション

リフレクションを使用して、特定の注釈を持つクラスを見つけています。私のプロジェクト構造は次のとおりです

1 つの WAR パッケージ: WEB-INF/classes/...packages.../ClassAnnoted1.class

次のコードを実行するクラスを持つ war に含まれる 1 つの JAR パッケージ:

CustomAnnotation も JAR パッケージに含まれています。

セットのサイズは正しいです (つまり、WAR の jar にアノテーションを持つ 3 つのクラスがある場合、セットのサイズは 3 に戻ります) が、その中のすべての要素は Class ではなく null です。クラスを取得し、JAR のクラス内の注釈パラメーターを確認する必要があります。

なぜこれが起こっているのか誰にも分かりますか?

編集:

また、機能しません。この場合、セットの長さは、注釈付きのクラスの数ではなくゼロです。

EDIT 2:わかりました、本当の問題は、アプリケーション全体をEARとしてパッケージ化していたため、次のようになったことです:

jar は、WAR lib フォルダーではなく、EAR lib フォルダーに含まれていました。したがって、jar クラスは war クラスを表示できませんでした。WAR を次のように JAR に直接依存させると、次のようになります。

それは働き始めました。しかし、元の質問はまだ残っています。WAR の代わりに EAR に Jar クラスを含めたい状況があるかもしれません (たとえば、jar を使用する必要がある複数の war がある場合)。

0 投票する
3 に答える
20483 参照

java - リフレクションはクラス タイプを取得できませんでした

次のコードを使用して拡張するクラスの別の jar を検索するために、 Reflectionsと呼ばれるサード パーティのライブラリを使用しています (Javaリフレクションと間違わないでください)。Foo

これを行うと、Reflections は次のエラーをスローします。

私が困惑している原因を修正する方法を知っている人はいますか?

前もって感謝します!

0 投票する
3 に答える
1071 参照

playframework-2.0 - Play2War - URL から Vfs.Dir を作成できませんでした

Play2War を使用して Play 2.1.1 アプリを Websphere 8.5.5 にデプロイしようとしています。アプリは起動時に正常に動作しますplay ~runが、war を Websphere にデプロイすると、次のエラー メッセージが表示されます。

他の誰かがこの問題を見ましたか?