1

URLClassLoaderを使用して、jarアーカイブから特定のディレクトリのクラスをロードしたいと思います。

プロジェクト構成は以下のとおりです。

/
 application.jar
 /lib/
  mysql.jar
  log4j.jar
  ...
 /myClasses/
  class1.class
  class2.class
  ...

jarには次のマニフェストがあります。

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.7.0_07-b10 (Oracle Corporation)
Main-Class: de.application.start
Class-Path: lib/mysql.jar lib/log4j.jar lib/....jar

私が現在行っていることは、次のように、内のすべてのファイルを反復処理し、/myClasses/その特定のクラス(すべて同じパッケージを持っている)をロードしようとしています。

File classDir = new File("/path/to/my/root/folder/myClasses/");
URL[] url = { classdir.toURI().toURL() };
ClassLoader loader = new URLClassLoader(url);
for (File file : classDir.listFiles()) {
    String filename = StringUtil.getFilenameWithoutExtension(file.getName());
    loader.loadClass("de.myClasses." + filename).getConstructor().newInstance();

しかし、ファイルが明らかに存在していても、私は常にjava.lang.ClassNotFoundException: de.myClasses.class1エラーが発生します。私は何が間違っているのですか?

4

2 に答える 2

0

file.getName()"Class1.class"の代わりに戻ります"Class1"よね?最後の6文字を削除します。

また、Class1がパッケージde.myClassesに含まれている場合は、

<your_base_dir>/de/myClasses

Class1が最上位のパッケージ(パッケージなし)にある場合は、次のように要求する必要があります。

loader.loadClass("Class1") // no de.mClasses. prefix
于 2012-09-12T12:53:57.750 に答える
0

コンパイルしたクラスは、パッケージに従ってディレクトリに配置する必要があります。したがって、クラスde.myClasses.Class1はディレクトリにある必要があります/myClasses/de/myClasses/

于 2012-09-12T13:16:15.230 に答える