問題タブ [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 - jar ファイルの内容を動的にリロードする
アプリケーションのクラスパスに 1 つの jar ファイルがあります。実行時に、新しいクラスを jar ファイルに追加し、場合によっては既存のクラスのフィールド/メソッドも変更します。現在、URLClassLoader を使用してクラスを動的にロードしています。動的に追加された新しいクラスは正しくロードされ、実行時に使用できます。ただし、実行時に変更された既存のクラスを再読み込みできません。一度ロードされたクラスは、クラスへのすべての参照が破棄されるまでリロードされないため、リロードを明示的に処理する必要があると述べている多くの記事を読みました。また、見つけたサンプル コードを試してみましたが、どれも機能しませんでした。
誰かがリロードの適切なアプローチを提案できますか? 同じためのサンプルコードは高く評価されます。
classloader - JBoss 7 - モジュール クラスローダーからプログラムで jar をロードする
コンテキスト クラス ローダーを使用して jar リソースを動的にロードする JBoss 7 にデプロイした WAR があります。
ただし、コンテキスト クラスローダーは WEB-INF/lib フォルダー内のリソースのみを検索します。
サービス モジュール ローダーからのモジュール「deployment..war:main」の ModuleClassLoader
リソースがある jboss の特定のモジュールのクラスローダーを取得するにはどうすればよいですか。 JBOSS_HOME/modules/org/custom/... のカスタム モジュールにロードする必要がある jar があります。
java - 動的に生成されたクラスのシリアル化
抽象クラスがあるとします
そして、クラスを動的に作成します
String からクラス Temp を動的に生成し、新しいインスタンスを呼び出し、ベース オブジェクトを抽出して、Base を拡張する他のインスタンスと同様に使用することができます。問題は、シリアル化するときに発生します。動的な Temp クラスから抽出した Base ベース オブジェクトをシリアル化できますが、後で別のセッションで逆シリアル化することはできません。これは、Temp がクラス パスに存在しなくなったためです。
皆さんはこれを回避する方法を考えられますか? 問題の Base オブジェクトを Temp クラスから分離して取得する方法が必要です (そこから Base クラスを抽出した後は気にしません)。Base オブジェクトは、Temp クラスの何にも依存しません。
java - gwan が Java ファイルを再コンパイルしない
Ubuntu 12.04 サーバーで実行されている gwan サーバーに付属している標準の hello.java と hello.c に対してテストしました。G-WAN 4.3.1 64 ビット (2013 年 3 月 1 日 17:36:39)
gwan を実行したら
sudo ./gwan -d
また、デーモン オプションなしで同じ動作が実行されていることにも気付きました。
次に、192.168.0.2:8080/?hello.c を参照すると、「Hello, ANSI C!」という期待どおりの出力が得られます。hello.c のテキストを変更し、ブラウザーを更新すると、期待どおりの変更が得られます。
hello.java ファイルで同じことを行うと、gwan を再起動するまでテキストへの変更が表示されません。
ファイルが変更されるたびに再コンパイルを引き起こす単純な設定が欠けているかどうかは誰にもわかりますか? 私は OpenJdk 7 を使用しています。別のネットワーク。同じことですが、サーバーを再起動するまで変更が反映されないようです。(Java の場合、.c ファイルで問題なく動作しました)
ありがとう -スティーブ
java - Class.forName による動的クラスのロードは、単純なクラス名で機能しますか?
単純なプログラムでクラスの動的ロードを試みましたが、興味深いことに、単純な名前でクラスを動的にロードしようとすると、classnotfoundexception で失敗します。これは、クラスがデフォルト パッケージ以外のパッケージの下にある場合にのみ発生します。
しかし、フルパス名を指定すると、動的ロードは成功します。ロードされるクラスは、メイン クラスと同じパッケージにあります。
ファイル Main.java:
java - その場で java.lang クラスを変更するにはどうすればよいですか?
バイトコードを書き直してクラスをリロードすることで、その場でスレッドにフィールドを追加する方法を探していますが、それが可能かどうかはわかりません。どんなポインタも歓迎します。クラスの変更とロードに関する情報を見つけました.JRebelがコードをシームレスにホットスワップできることは知っていますが、同じアプローチ/ツールがここに適用されるかどうかはわかりません.
ここでの動機は、スレッド ローカル オブジェクトの理論的に優れた代替手段を探ることです。メソッドが機能する場合、スレッド ローカルをアノテーションに置き換えることができ、結果は現在の JDK 実装よりも優れているはずです。
追伸:「諸悪言論の根源」を救ってください
ユースケースの明確化:
ThreadLocal を持つクラスがあるとします。
それを注釈に置き換えたい:
しかし、上記のコードが生成される代わりに、Thread が Acounter フィールドを持ち、実際のコードが次のようになるように Thread を変更したいと思います。
android - Gradle を使用した Dalvik でのカスタム クラスのロード (Android New Build System)
Android デベロッパー ブログの Fred Chung によるDalvik のカスタム クラス ロードの紹介によると、次のようになります。
Dalvik VM は、開発者がカスタム クラスの読み込みを実行するための機能を提供します。アプリケーションは、Dalvik 実行可能 (「dex」) ファイルをデフォルトの場所からロードする代わりに、内部ストレージやネットワーク経由などの別の場所からロードできます。
ただし、カスタム クラスのロードを行う必要がある開発者は多くありません。しかし、そのブログ投稿の指示に従っている人は、Google I/O 2013 で導入された Android 用の新しいビルド システムである Gradle で同じ動作を模倣する際に問題が発生する可能性があります。
古い (Ant ベースの) ビルド システムと同じ中間ステップを実行するために、新しいビルド システムをどのように適合させることができるでしょうか?