問題タブ [dynamic-class-loaders]
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.
java - OSGi での動的クラスのロード
私は OSGi で正常に動作するフレームワーク モジュールをたくさん持っています。すべてのサービスとコンポーネントは互いに検出され、正常に動作しています。
ただし、クラスに関して動的なことを行うフレームワークが 1 つあります。基本的に、ある時点でクラス名を付けて Class.forName() を実行すると、リフレクション マジックが発生します。
これは、標準のjvmで実行し、SPIを使用してフレームワークを接続する場合にうまく機能しますが、フレームワークを介してアプローチしようとしているランダムクラス「test.MyTest」がフレームワークに表示されないため、OSGiでは失敗します。
「java.lang.ClassNotFoundException: test.MyTest がフレームワークで見つかりません」がスローされます。
だから私の質問: すべてを見る必要があるフレームワークのこの可視性の欠如をどのように解決できますか? Import-Package: *
?
アップデート
OSGi がこの面で 2010 年以来あまり変わっていないと仮定すると、記事http://njbartlett.name/2010/08/30/osgi-readiness-loading-classes.htmlは非常に興味深いものです。私は現在、積極的に登録するクラスと、OSGi 経由で注入されるドメイン ファクトリの両方のサポートを追加しました。
それとは別に、デフォルトの解決ではコンテキストクラスローダーが使用されるため、他のすべてが失敗した場合は、クラスのロードを試行するために使用されます。
アップデート
提案されたサポートも追加しましたDynamicImport-Package
。これは、小規模なプロジェクトの方が簡単です。
java - クラスローダーが実行時にjarを「ロード」していませんか?
まず、それはすべて機能していましたが、突然停止しただけで、何かをしたのか、どこかに問題があるのか 本当にわかりません。
私のクラスローダーは実行時にjarファイルをロードする必要がありますが、明らかにそうではありません。
URL の完全なパスを開示することはできませんが、jar が文字列の URL が示す場所にあることを 101% 確認できますが、DefNotFoundClassException が発生します。
java - URLClassLoader ClassNotFoundException
実行時にクラスを動的にロードするコードを作成しようとしています
問題は、これによりclassNotFound例外が発生し続けることです。.classファイルがそのディレクトリに存在することは確かです.もう1つのことは、既にロードされたクラスをロードしようとしたところ、機能したため、コードが機能しない場合にのみ機能します.クラスファイルがありません!!
java - GAE のメモリからプログラムによってクラスをコンパイルおよびロードする
String で Java ソース ファイルを生成し、それをクラスにコンパイルし、そのクラスをロードして、すべて Goole App Engine (GAE) からコードを実行したいと考えています。それは可能ですか?
Java 6 の新機能である JavaCompiler を単純に使用しようとしましたが、例外が発生しました。
実行時に、それが機能しないことを示唆しています。
さらに、プロジェクトにjcompiloを含めようとしましたが、この非常に高密度のライブラリ プロジェクトを使用して文字列からプログラムをコンパイルする方法に関するドキュメントはまったくありません。
では、目標を達成するためにどのように着手すればよいでしょうか。
java - Java で動的にロードされたクラスの .class ファイルへのパスを取得する
特定のタイプのクラスパス内のすべてのクラスをインスタンス化してマップしようとしています。
ライブラリを使用してスキャンを実行し、Reflections
ロードされたクラスのリストを取得しました。
次に、それらをマッピングするときに、競合をチェックしています (キーは単純なクラス名です)。
JARs
その場合は、例外をスローして、競合するクラスの完全修飾名と、それらがロードされたパス (たとえば、それぞれを見つける可能性 のあるパス) を指摘したいと思います。
メモリからクラスをロードすることもあるJAR
と思いますが、ディスクからロードしていると仮定すると、そのパスを取得する方法はあるのでしょうか...
以下のコード スニペットを参照してください。
このコードはコンパイルできますが、動作しません。getClass().getResource(class1.getSimpleName()+".class") は null を返します。へのパスを取得するにはどうすればよい.class
ですか?
java - Javaのデフォルトのクラスローダーはすべてをメモリに保持するか、ファイルシステムに残しますか?
実行中のプログラムに動的にロードされた jar がある場合、jar 内のすべてのコンテンツ (クラス、リソース) は VM メモリのどこかに保存されますか?
クラスまたはテキスト リソース ファイルにアクセスする必要があるたびに (たとえば、getClass().getResourceAsStream を介して)、ファイル システム内の jar に再度アクセスするのではなく、メモリからすばやくプルできるようにするには? つまり、その後jarを削除できます。
申し訳ありませんが、間違った質問をしている場合は、特にjarに詰め込まれたリソースについて、誤解している可能性があるため、質問をクラスローダープロセスの説明に変更してください。ありがとうございました。
reflection - 動的クラスの読み込み - 非 JDBC、汎用: 「シンボル メソッドが見つかりません」
データを分析するコードをいくつか作成しましたが、一般的な処理ではなく、データの非常に特定のソースに合わせて調整されたコードが必要であることに気付きました。個々のソースは時間とともに変化する可能性があり、考慮すべきさまざまなソースがすでにいくつかあります。このケースに対処するために、私は Java から完全なスタンドアロン プログラムを起動していました。それは素晴らしいことですが、これにはいくつかの問題があり、代わりに動的クラス ローディングを使用することにしました。私は v 1.1 から Java を使用しており、ほとんどの Java の問題に精通していますが、この特定のタスクでは、間違ったバージョンの Java を使用しているのではないかと考えています。私のバージョンでは認識されていません。私が考えていた多分私は重要なインポートステートメントを省略しましたか?
従うべきいくつかの良い例を見つけました。その中で最も良い例は、私がやりたいことを正確に実行しているため、次のようです。http://media.techtarget.com/tss/static/articles/content/dm_classForname/DynLoad.pdf
そこにあるコードの最初の例は、まさに私がやりたいことのようなものなので、そこからいくつかのビットを持ち上げました-私が自分でやっていたこと(私が苦労していたもの)とそれほど違いはありませんが、そうなるでしょう. t コンパイル - さまざまな「シンボルが見つかりません」というエラー。私のコードはもっとかさばるので、私はそれらをすべて単独で試してみましたが、私のコードと同じようにコンパイルできません! そのコードは次のとおりです。
コンパイルしようとすると、次のようになります。
私の Java バージョン: javac 1.7.0_45
問題は非常に単純/基本的なものだと思いますが、ドキュメントを見ても手がかりはありません!
java - 安全でない defineAnonymousClass と ClassLoader の間の異なる動作
classloader と Unsafe::definedAnonymous() を使用して、生成されたバイトコード byte[] をロードしました。classLoader.loadClass() によって返される Class の使用はc.getMethod()
、どのc=Unsafe.defineAnonymousClass()
API で失敗しても成功します。生成されたバイトコードは間違っていますか?
私のコード:
エラーは次のとおりです。
生成されたバイトコードは次のとおりです。
Callee メソッドのインライン化に対応するこのバイトコード。
このバイトコード シーケンスを確認したところ、エラーはないようです。エラー メッセージの変数 3 は 4 回発生します。
対応するメソッドは次のとおりです。
}