Reputation: 324
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!
Upvotes: 1
Views: 4450
Reputation: 9150
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.
Upvotes: 4
Reputation: 324
changing from new BigDecimal()
by adding exact classPath as new java.math.BigDecimal()
solves the problem!
Upvotes: 2