java java编译器在创建依赖类时出错
我编写了一个代码,生成了两个类,我将它们写入缓冲区,并用JavaCompiler编译它们。我的课是这样的。java文件
public class A{
public A() { }
public String toString(){ return "A";}
}
及
public class B extends ArrayList<A> {
public B() {
super();
}
public void addItem(A a)
{
this.add(a);
}
public void print() {
this.print();
}
}
像这样的
但是,类的名称是随机生成的,当我创建文件时,会出现如下错误:
symbol: class A
location: class B
./src/A.java:4: error: cannot find symbol
(第四行是“…扩展ArrayList…”a)下面有一个“^”符号
我的代码生成器编译如下
首先,我用类型类的模板填充缓冲区,然后按如下方式编译:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, f.getPath());
之后,我创建另一个缓冲区,并用我的B类型类模板填充它,然后像这样编译
System.out.println(f.getParentFile().getPath());
compiler.run(null, null, null, f.getPath());
f是
f = new File(("./src/" + name + ".java"));
我怎样才能解决这个问题
# 1 楼答案
如注释中所述,编译类
B
时,编译器需要了解类A
。在下面的示例中,我们将编译类/tmp/bin/
的输出目录添加到optionList
中编译器的类路径中如果不需要在文件系统上创建源文件,则可以阻止在文件系统上创建源文件
或者在文件系统上创建Java源文件。类似于上面的代码,对
compilationUnits
做了一个小改动。假定文件已经存储在给定位置# 2 楼答案
这应该是有帮助的