1

javassist を使用して別の Java クラスをコンパイルするプログラムを作成しています。生成されたクラスは、 のようないくつかのオブジェクトを使用しますBigDecimal, List, ArrayList。だから私は彼らのパッケージをインポートします:

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util.List");
pool.importPackage("java.math.BigDecimal");
pool.importPackage("java.util.ArrayList");

次に、CtField.make()for each オブジェクトを使用していくつかのオブジェクトを作成します。javassist を使用してコンパイルすると、エラーがスローされます。

CannotCompileException: [source error] no such class: BigDecimal

リストは正常に機能していますが、BigDecimal または ArrayList は機能していません。この問題の手がかりはありますか?ありがとう!

4

2 に答える 2

4

名前が示すように、ClassPool.importPackage()( JavaDoc ) はクラスではなくパッケージをインポートするためのものです。それを考慮して、次を使用する必要があります。

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(classDir); //classDir is my program Directory
pool.importPackage("java.util");
pool.importPackage("java.math");

注: Javassist 3.14 以降では、完全修飾クラス名のインポートもサポートしています。したがって、そのバージョンでは、元のコードも機能するはずです。

于 2015-01-30T09:25:47.023 に答える