2

URLClassLoader を使用して実行時にファイルからクラスをロードする場合:

ClassLoader classLoader = new URLClassLoader(new URL[] { classesUrl }, getClass().getClassLoader());
String name = fileName.replace("\\", ".").replace("/", ".").substring(0, s.lastIndexOf("."));

System.out.println("loading class " + name);
Class c = classLoader.loadClass(name);
System.out.println("loaded " + c.getCanonicalName()); // 1

これはうまくいくようです - 出力 at 1is loaded com.robert.test.NumberUtil.

次に、を使用してそのクラスのインスタンスを作成しようとすると

Class.forName("com.robert.test.NumberUtil");

を取得しClassNotFoundException: com.robert.test.NumberTestます。私がやろうとしていることは可能ですか?または、クラス at を使用する必要がありますか1(つまり、返されたオブジェクトを使用classLoader.loadClass()し、スコープ外になったら再ロードしますか?)。

4

2 に答える 2

0

私はそれを回避しました。JUnit テストをコンパイルしてから、生成されたクラスをロードし、 で注釈が付けられたクラスを実行@RunWith(Suite.class)しようとしましたが、クラスを JUnitCore に渡そうとすると、ロードされたクラスが失われたように見えました。

いずれにしても、これはカスタム Ant タスク用であるため、Ant JUnitTask クラスを使用し、クラスの正規名を使用して実行し、コンパイル済みのテスト ディレクトリを JUnitTask クラスパスに追加しました。

于 2013-07-24T17:56:15.403 に答える