我正在使用FreeMarker生成Java代码,但由于大部分代码都是动态生成的,因此很难控制代码格式。
我希望能够得到格式良好的代码。有没有人知道一个库或类似于Java代码漂亮打印机的东西?
我正在使用FreeMarker生成Java代码,但由于大部分代码都是动态生成的,因此很难控制代码格式。
我希望能够得到格式良好的代码。有没有人知道一个库或类似于Java代码漂亮打印机的东西?
Google Java Format 对我来说非常完美。 https://github.com/google/google-java-format
在 Maven 构建之后,可以在 core/target 文件夹中找到 google-java-format-0.1-SNAPSHOT.jar,并尝试 java -jar google-java-format-0.1-SNAPSHOT.jar
以查看使用信息。
我想我会使用Eclipse的CodeFormatter,就像这个人一样:http://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-code-formatter-from-your-code/
更新: 最终使用了jastyle ( http://sourceforge.net/projects/jastyle/ )。 这里有一个例子:
public static String formatJavaCode(String code) throws Exception {
ASFormatter formatter = new ASFormatter();
// bug on lib's implementation. reported here: http://barenka.blogspot.com/2009/10/source-code-formatter-library-for-java.html
code.replace("{", "{\n");
Reader in = new BufferedReader(new StringReader(code));
formatter.setJavaStyle();
in.close();
return FormatterHelper.format(in,formatter);
}
我从FreeMarker转换到了自己的Java源代码生成工具。这些源代码可以从这里访问: https://source.mysema.com/svn/mysema/projects/codegen/trunk/
它的设计方式是只需调用API,输出就会被正确格式化。以下是一个示例:
JavaWriter writer = new JavaWriter(new StringWriter());
writer.beginClass("FieldTests");
writer.privateField("String", "privateField");
writer.privateStaticFinal("String", "privateStaticFinal", "\"val\"");
writer.protectedField("String","protectedField");
writer.field("String","field");
writer.publicField("String","publicField");
writer.publicStaticFinal("String", "publicStaticFinal", "\"val\"");
writer.publicFinal("String", "publicFinalField");
writer.publicFinal("String", "publicFinalField2", "\"val\"");
writer.end();
会变成
public class FieldTests {
private String privateField;
private static final String privateStaticFinal = "val";
protected String protectedField;
String field;
public String publicField;
public static final String publicStaticFinal = "val";
public final String publicFinalField;
public final String publicFinalField2 = "val";
}
我为Querydsl开发了codegen实用程序,它将Java域类型映射到查询类型。因此,序列化需求非常复杂。使用FreeMarker模板并不简单。输出中有太多的自定义内容,最好在Java中控制而不是在模板语言语法中。
这不是Codegen模块的广告。我只是想说明一点,对于高度可定制的序列化,FreeMarker可能无法扩展。
你可以在Eclipse中编辑.java文件时进行格式化。当你不编辑它时,格式化与否并不重要。
如果您需要具有丰富配置选项以适应您的代码格式化风格的独立命令行工具,可以尝试以下两种:
它们都是免费、开源的,并且可以格式化不仅仅是Java源代码(C、C++、C#等)。