Java代码格式化

6

我正在使用FreeMarker生成Java代码,但由于大部分代码都是动态生成的,因此很难控制代码格式。

我希望能够得到格式良好的代码。有没有人知道一个库或类似于Java代码漂亮打印机的东西?


https://dev59.com/1XNA5IYBdhLWcg3wWsYA - Christophe Roussy
10个回答

2

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 以查看使用信息。


1

我想我会使用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);
}

1

您可以使用EclipseJalopy代码格式化工具来重新格式化生成的代码。


但我想以编程的方式实现。Eclipse 的代码格式化工具可以作为一个独立库来使用吗? - the qwerty
理论上是可以的,但这不会是一个简单的练习。但我相信Jalopy格式化程序可以更容易地嵌入。 - Eugene Kuleshov
是的,我的第一个实现是使用Eclipse的格式化程序完成的。但是由于其简单性,我最终将其替换为http://sourceforge.net/projects/jastyle/。 - the qwerty

1

你可以运行像astyle这样的格式化程序


你知道Java中有一个类库可以做同样的事情吗?我想在我的项目中使用一个,并将生成的所有字符串传递给格式化程序。 - the qwerty

1

0

我从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可能无法扩展。


源代码已移动到 https://source.mysema.com/svn/mysema/projects/deprecated/codegen/trunk。 - migu

0

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


0

如果您需要具有丰富配置选项以适应您的代码格式化风格的独立命令行工具,可以尝试以下两种:

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


0

在Eclipse中,您可以简单地激活保存操作并使用自己的或预定义的格式化程序。

只需在首选项中激活两个:

  • 窗口 -> 首选项 -> Java -> 代码风格 -> 格式化程序

还要激活保存操作:

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

代码格式化程序 | 保存操作


0
最简单的方法是将您的代码粘贴到Eclipse Java IDE中,然后在所选代码上执行ctrl+f。这将使您的代码以易于阅读的形式进行格式化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接