Java代码格式化

Java代码格式化,java,formatting,coding-style,Java,Formatting,Coding Style,我使用FreeMarker生成java代码,但由于大部分代码是动态生成的,因此很难控制代码的形成 我想把代码格式化好。有人知道java代码的库或类似漂亮打印机的东西吗?您可以使用的或代码格式化程序来重新格式化生成的代码。您可以运行像Jalopy这样的格式化程序。您可以使用它的CLI进行独立使用 我想我会使用Eclipse的CodeFormatter,就像这个家伙: 更新: 最终使用了jastyle()。 下面是一个例子: public static String formatJavaCode(S

我使用FreeMarker生成java代码,但由于大部分代码是动态生成的,因此很难控制代码的形成


我想把代码格式化好。有人知道java代码的库或类似漂亮打印机的东西吗?

您可以使用的或代码格式化程序来重新格式化生成的代码。

您可以运行像Jalopy这样的格式化程序。您可以使用它的CLI进行独立使用

我想我会使用Eclipse的CodeFormatter,就像这个家伙:

更新: 最终使用了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);
}

您可以在Eclipse中编辑.java文件时对其进行格式化。
当您不编辑它时,它是否格式化并不重要。

我从FreeMarker切换到我自己的Java源代码生成实用程序。可从此处访问源:

它的设计方式是,您只需调用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";

}
我开发了codegen实用程序,用于将Java域类型镜像为查询类型。因此序列化需求非常复杂。使用FreeMarker模板无法进行简单缩放。在输出中有太多的定制,用Java控制比用模板语言语法更好


这不是Codegen模块的广告。我只是想指出,对于高度可定制的序列化,FreeMarker可能无法扩展。

谷歌java格式非常适合我。


maven构建之后,在核心/目标文件夹中找到google-java-format-0.1-SNAPSHOT.jar,然后尝试
java-jar google-java-format-0.1-SNAPSHOT.jar
查看使用信息。

最简单的方法是将代码粘贴到eclipse java IDE中,并对所选代码执行ctrl+f组合键。这将以易于阅读的形式格式化代码。

对于具有大量配置选项的独立命令行工具,您可以尝试:


它们都是免费的、开源的,并且可以不仅仅是java源代码(C++、C++、C等)格式。

,可以简单地在Eclipse中激活保存操作,并使用自己的或预定义的格式化程序。 只需在首选项中激活这两个选项:

  • 窗口->首选项->Java->代码样式->格式化程序
同时激活保存操作:

  • 窗口->首选项->Java->编辑器->保存操作->格式化源代码(格式化所有行和导入)
|

但我想按程序进行。eclipse的代码格式化程序可以作为一个独立的库使用?理论上是的,但这不是一个简单的练习。但我相信jalopy formatter可以更容易地嵌入。是的,我的第一个实现是使用Eclipse的formatter完成的。但由于它的简单性,我最终用它进行了交换。你知道java中的一个库也有同样的功能吗。我希望在我的项目中包含一个,并将生成的所有字符串传递给格式化程序。源已移动到