Frage

I'm writing a program using javassist to compile another Java class. The generated class use some objects like BigDecimal, List, ArrayList. So I import their packages:

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");

Then I make some objects using CtField.make() for each object. When I use javassist to compile, it throws error:

CannotCompileException: [source error] no such class: BigDecimal

List is working fine, however, BigDecimal or ArrayList aren't. Is there any clue for this problem? Thanks!

War es hilfreich?

Lösung 2

changing from new BigDecimal() by adding exact classPath as new java.math.BigDecimal() solves the problem!

Andere Tipps

As the name implies, ClassPool.importPackage() (JavaDoc) is for importing packages, not classes. Considering that, you should use:

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

Note: starting from Javassist 3.14, it does support importing also fully-qualified-class-names. So with that version, your original code should also work.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top