問題タブ [urlclassloader]
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 - clojureでJavaソースファイルをプログラムでコンパイルしてロードする
SOに関するこの質問に続いて、いくつかの問題に遭遇しました: How do I programmatically compile and instantiate a Java class?
以下は私のclojure翻訳です:
最後の行まですべて順調です。コンパイル済みの Test.class があり、そのファイルを target/classes/test フォルダーにコピーすると、それを読み込むことができます。しかし、最後の行では、ClassNotFoundException
. 私は何を取りこぼしたか?
java - urlclassloader の理解、ロードされた jar のクラスへのアクセス方法
URLClassLoader を使用して jar ファイルにアクセス/利用可能にする方法を理解しようとしています。
まず、jarファイルをロードしています
プリントアウトには、jgroups-3.4.2.Final.jar にある宣言されたフィールドが表示されますが、classnotfound エラーがスローされます。
クラスがロードされていることが出力に示されているのに、クラスが見つからない理由がわかりません。
thxアート
java - インポート依存関係を持つクラスを呼び出す Java urlclassloader
urlclassloaders の他のスレッドでいくつかの助けがあった後、urlclassloaderを理解し、ロードされた jar のクラスにアクセスする方法について、 私は問題に正しく取り組んでいるとは思わないので、質問を続けます。
myPackageA.start
urlclassloader の呼び出しには、次のコードで
フォームmyPackageB.comms
myPackageB.comms
への依存関係がありますimport org.jgroups.JChannel
/home/myJars/jgroups-3.4.2.Final.jar
通常、上記のコードを呼び出して、java -cp /home/myJars/jgroups-3.4.2.Final.jar:myPackageB myPackageB.SimpleChat
期待どおりに実行します。
私の質問は、スクリプト内で -cp を設定して、以下のコードを使用して呼び出すときにインポートが機能する方法ですmyPackageB.SimpleChat
。java -cp myPackageA.jar myPackageA.start
ありがとう
アート
java - インポートする必要のない JRE クラスのリストをプログラムで決定する
インポートせずにコンパイル単位で参照できる JRE クラスをプログラムで見つける必要があります (静的コード分析のため)。パッケージローカル クラスは無視できます。JLS によると、パッケージのクラスjava.lang
は暗黙的にインポートされます。出力は、バイナリ クラス名のリストである必要があります。このソリューションは、プレーンな Java 5 以降 (Guava、Reflectionなどなし) で動作し、ベンダーに依存しない必要があります。
信頼できる Java ベースのソリューションであれば、大歓迎です。
これまでに試したことに関するメモを次に示します。
一見すると、問題は「パッケージからすべてのクラスをロードする方法は?」に要約されるように見えますが、これはもちろん事実上不可能ですが、いくつかの回避策があります (たとえば、これとこれ、およびそこにリンクされているブログ投稿)。しかし、複数のクラスローダーの問題が存在しないため、私の場合ははるかに単純です。java.lang
システム/ブートストラップ クラスローダによって常に何かをロードでき、そのパッケージに独自のクラスを作成することはできません。問題は、システムのクラスローダーが、リンクされたアプローチが依存するクラスパスを公開しないことです。
これまでのところ、システム クラスローダーのクラス パスにアクセスできませんでした。これは、使用している HotSpot VM で をObject.class.getClassLoader()
返しnull
、委譲によってThread.currentThread().getContextClassLoader()
ロードできますjava.lang.Object
が、それ自体にはクラスパスが含まれていないためです。したがって、このような解決策は私にはうまくいきません。また、保証されたシステム プロパティのリストには、この種のクラスパス情報 ( などsun.boot.class.path
) を持つプロパティは含まれません。
rt.jarが存在すると想定する必要がまったくなく、システム クラスローダーが使用するリソースのリストをスキャンする必要がなかったとしたら、それは素晴らしいことです。このようなアプローチは、ベンダー固有の JRE 実装に関してより安全です。
java - ClassLoader クラス依存 (プラグイン)
UrlClassLoaders についてお聞きしたいです。うまく機能するメインの .jar ファイルを作成します。ここで、フォルダーの 1 つからプラグインをロードできるようにしたいと考えています。フォルダー内の .jar ファイルが見つかり、その内部のクラス (名前、パス) を一覧表示できるようになるまで、私はそれを書きました。問題は、私が彼にそのクラスを見つけるように頼んだとき (そのインスタンスを作成するため)、次のようにメインの jar ファイルから継承するクラスが見つからないことです:
そのため、UrlClassLoader に " ExpansionA " クラスを解決するように要求すると、 MainJar ではなくプラグイン jar で " Expansion " クラスが検索されますが、プラグイン jar には " Expansion "クラスがありません。リソースライブラリ...そしてdefineClassメソッド中にNoDefFoundForClassError例外をスローします。MainJar のクラスの後にチェックするように彼に指示するにはどうすればよいですか? (1つのクラスだけでなく、プラグインがMainJarから任意のクラスを継承できるようにしたい)。私を助けることができますか?
java - class.getClassLoader() が返すクラスローダーを指定する方法は?
URLClassLoader (親として共通のクラスローダーを持つ) を使用して実装がロードされるラッパーを介して使用される、1 つの一般的な部分といくつかの「実装固有」のプロジェクトがあります。現在、@Foo によって注釈が付けられたジェネリック クラス A がありますが、これはかなり実装固有です。
A は実装固有のコードを介して最初にロードされるため、URLClassLoader で開始されますが、親でのロードを試みます。これは、汎用クラスであるため、クラスをロードできます (汎用コードでクラスをインスタンス化できる必要がありますが、注釈にアクセスする必要はありません)。
次に、実装は注釈 @Foo をチェックしますが、Java ランタイムが一般的なものではない A.class.getClassLoader() を介して注釈をロードしようとするため、見つかりません。
明らかに、Java ランタイムを変更することはできませんが、URLClassLoader にそれによってロードされるクラスを宣言させる方法はありますか?一般的な親によって)?
java - クラスをロードせずにjarからメソッドをロードする方法は?
クラスがほとんどなく、メソッドが定義されている Jar ファイルを読み込もうとしています。個々のクラスをロードせずに、すべてのクラスから宣言されたすべてのメソッドを取得したい。出来ますか?
jarファイルとメソッドをロードする方法は次のとおりです(現在のクラス名を使用)。
前もって感謝します
java - Java Class Loader がクラスにインポートされたクラスをロードしない
次のように ClassLoader を使用してクラスをロードしようとしています
Example クラスが他のクラスをインポートする場合。そのクラスは JVM によって自動的にロードされますか?? クラスExampleにインポートされ、ロードできない別のクラスExample2があるというエラーNoClassDefFoundErrorがスローされているためです。
何が起こっているのか真剣にわかりません。
前もって感謝します