Java源代码生成框架
我有一组带有旧式Doclet标签,注释和注释的Java 5源文件。 基于此,我想为另一组Java类编写一个生成器。
最好的方法是什么? Java中是否有用于代码分析/生成的独立库? 在此领域的任何共享的经验表示赞赏。
所以,我发现这些:
-
JaxME的Java Source Reflection – 似乎很好,但它似乎不支持注释。 自2006年以来它也没有发布。
-
Annogen – 使用JDK的Doclet生成器,它有1.5 JDK以下的一些错误。 它也很长时间没有发布。
-
Javaparser – 似乎也很好,而且很新,但只支持单个类的访问者模式,即没有上述2个包中的查询机制。
NetBeans IDE和Eclipse JDT项目都具有相当多的Java代码分析/生成逻辑。 我不知道他们的依赖是什么(也就是说,你可以将它们作为独立的库使用),但除此之外,我会好好看看这两个:在更密集的开发中不可能有一个java代码分析库以及更多最新。
更新:
PMD也可能是有意义的:
PMD扫描Java源代码并查找潜在的问题,例如:
* Possible bugs - empty try/catch/finally/switch statements * Dead code - unused local variables, parameters and private methods * Suboptimal code - wasteful String/StringBuffer usage * Overcomplicated expressions - unnecessary if statements, for loops that could be while loops * Duplicate code - copied/pasted code means copied/pasted bugs
此外,此博客文章讨论了各种静态代码分析工具。
如果您只需要生成语法正确的Java代码,请检查Codemodel 。
我最终使用了PMD。 代码示例如下所示:
final Java15Parser parser = new Java15Parser(); final FileInputStream stream = new FileInputStream("VehicleServiceType.java"); final Object c = parser.parse(new InputStreamReader(stream)); final XPath xpath = new BaseXPath("//TypeDeclaration/Annotation/NormalAnnotation[Name/@Image = 'WebService']", new DocumentNavigator()); for (final Iterator iter = xpath.selectNodes(c).iterator(); iter.hasNext();) { final Object obj = iter.next(); // Do code generation based on annotations... }
它不完全是代码生成器,但如果你需要一些与bean相关的function,那么apache beanutils可以节省时间