【发布时间】:2011-02-22 00:04:08
【问题描述】:
我正在使用 FreeMarker 生成 java 代码,但由于大部分是动态生成的,因此很难控制代码的形成。
我想让代码格式正确。有谁知道用于 java 代码的 lib 或类似漂亮打印机的东西?
【问题讨论】:
标签: java formatting coding-style
我正在使用 FreeMarker 生成 java 代码,但由于大部分是动态生成的,因此很难控制代码的形成。
我想让代码格式正确。有谁知道用于 java 代码的 lib 或类似漂亮打印机的东西?
【问题讨论】:
标签: java formatting coding-style
Google java 格式非常适合我。 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查看使用信息。
【讨论】:
【讨论】:
你可以运行像astyle这样的格式化程序
【讨论】:
Jalopy 运行良好。您可以使用它的 CLI 进行独立使用。 Japlopy Console Plugin
【讨论】:
我想我会使用 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);
}
【讨论】:
您可以在 Eclipse 中编辑 .java 文件时对其进行格式化。 当你不编辑它时,它是否被格式化并不重要。
【讨论】:
我从 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 IDE 中,然后对您选择的代码执行 ctrl+f。它将以易于阅读的形式格式化您的代码。
【讨论】:
对于具有大量配置选项以适合您的代码格式样式的独立命令行工具,您可以尝试:
它们都是免费的、开源的,并且可以格式化的不仅仅是 Java 源代码(C、C++、C# 等)
【讨论】:
您可以简单地在 eclipse 中激活保存操作并使用您自己的或预定义的格式化程序。
只需在首选项中激活两者:
同时激活保存操作:
【讨论】: