我正在开发一个从xsd创建Java类的项目。在运行时,我想创建类并读取这些类的名称。但是,当我第一次运行项目时(在创建类之前),它给出了一个错误,上面写着“java.lang.ClassNotFoundException:generated.classes.AddressType”。如果我再次运行,没有更改任何东西(此时创建类),它不会给我一个错误。我使用“com.sun.tools.xjc.api”来创建类。当我想读类名时,我只是这样做
File folder = new File(System.getProperty("user.dir")+"\\src\\generated\\classes");
File[] listOfFiles = null;
List<String> namesOfClasses = new ArrayList<>();
listOfFiles=folder.listFiles();
for(File file: listOfFiles){
try {
if(!file.getName().equals("ObjectFactory.java")){
String classname="generated.classes."+file.getName().substring(0, file.getName().length() - 5);
namesOfClasses.add(classname);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return namesOfClasses;
看起来,在运行时无法看到新创建的类。如何在运行时读取此类?
答案 0 :(得分:0)
您可以像(by answer)一样动态编译类:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, files);
请查看类似的问题以寻求其他选择:
为了测试我的xjc-documentation-annotation-plugin,我正是这么做的 :XJCPluginDescriptionAnnotationTest可以用作分步教程。