特定の JAR ファイルが既にクラスパスにあるかどうかを実行時に知る最善の方法は何ですか? (そうでない場合は、実行時に追加する必要があります)。
jarの名前もその中のクラスも事前にわかりません。ユーザーが選択できます。jar は、ランタイムのプラグ可能なコンポーネント (私の問題ではドライバー) を表します。
特定の JAR ファイルが既にクラスパスにあるかどうかを実行時に知る最善の方法は何ですか? (そうでない場合は、実行時に追加する必要があります)。
jarの名前もその中のクラスも事前にわかりません。ユーザーが選択できます。jar は、ランタイムのプラグ可能なコンポーネント (私の問題ではドライバー) を表します。
実用的な方法: Class.forName("com.myclass")
wherecom.myclass
は、ターゲット jar の内部 (および内部のみ) にあるクラスです。それが をスローする場合ClassNotFoundException
、jar は現在のクラスパスにありません。
ただし、実行時に jar をロードするのは簡単ではないことに注意してください。クラスローダーをいじる必要があります。原則として (例外があります)、実行前にクラスパスに jar を明示的に追加できるはずです。
更新:更新された質問では、「jar の名前もその中のクラス」も事前にわからないと述べています。もしそうなら、この答えは明らかに当てはまりません。答えは、特定のクラスローダーによって異なります。通常のシナリオでは、AlexAndas の答えが機能するはずです。
アプリケーションにjarファイルの情報を提供しないクラスローダーがある可能性があるため、一般的にはこれを行うことはできません。URLClassLoaders の場合、Alex Adas のソリューションを使用できます。
この方法を試してください:
public static void isJarExist(String jarName) { ClassLoader classLoader = ClassLoader.getSystemClassLoader(); if (URLClassLoader の classLoader インスタンス) { URLClassLoader classLoader2 = (URLClassLoader) classLoader; URL [] urls = classLoader2.getURLs(); for (URL url : urls) { ファイル file = new File(url.getFile()); if (file.getPath().endsWith(jarName)) { System.out.println(jarName + "exist"); 戻る; } } System.out.println(jarName + "存在しません"); } }isJarExist("myjar.jar) のように jar を渡すだけで、必要に応じてブール値を返すように変更することもできます