5

申し訳ありませんが、この質問はばかげているか、すでに回答されている可能性がありますが、見つけることができませんでした。

クラスパスでリモートファイルを受け入れることができる既知のJavaクラスローダー、つまり、CLASSPATH="http://somewhere.net/library.jar:..." のようなエントリがあるかどうか疑問に思っています。

アプレットや Java Web Start について話しているのではないことに注意してください。さまざまなバックエンド (MySQL、Oracle など) を使用できるアプリケーションを考えてみてください。ユーザーのバックエンド設定に基づいて、シェル スクリプトでクラスパスを準備し、クラス ローダーで必要なjar (この例では jdbc ドライバー) を配布サーバーからダウンロードします。私はMavenについても話していません(ユーザーはバイナリ配布を取得するだけです。ソースから必要なものを構築することを強制したくありません)。

4

3 に答える 3

2

SystemClassLoaderですURLClassLoader。あなたは試すことができます、私はあなたに任せます:

Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});
method.setAccessible(true);
method.invoke(ClassLoader.getSystemClassLoader(), new Object[]{new URL("http://somewhere.net/library.jar")});  
Class.forName("your.remote.ClassName");

お知らせ下さい :)

于 2013-01-09T22:39:39.703 に答える
1

クラスのロードは複雑なプロセスです。通常のクラスパス ClassLoader がすべてのプラットフォームのすべてのランタイム環境で URLClassLoader である可能性はありますが、必ずしもそうである必要はないと思います。

クラスパス エントリを追加する 1 つの方法は、Class-Path:プロパティを jarfile のMETA-INF/MANIFEST.MFファイルに追加することです。そのプロパティのスペースで区切られた値は、URLClassLoader で解決されます。(Maven は、そのクラスパス エントリの一部を URI として jarfile マニフェストに追加します。これは、それがfile://暗示されているか、http://またはhttps://機能することを意味します。)したがって、一部のランタイム環境の通常の Java クラスパスで動作する URL ベースのクラスパス エントリを取得できない場合でも、できるはずです。マニフェスト ファイルで URL を指定することにより、それらを機能させることができます。

(私は Java WebStart がどのように機能するのかよく知りませんが、URL ベースのクラスパス エントリも利用しているのではないでしょうか?)

于 2015-09-16T09:25:16.150 に答える
1

URLClassLoaderを使用することもできますが、毎回ファイルをダウンロードすることになり、コードがより複雑になります。

既にシェル スクリプトを使用している場合は、単純に curl を使用して jar をダウンロードし、クラスパスに配置してみませんか?

于 2013-01-09T22:39:41.040 に答える