Форматирование кода Java - PullRequest
5 голосов
/ 20 мая 2010

Я использую FreeMarker для генерации Java-кода, но, поскольку большая его часть генерируется динамически, сложно контролировать формирование кода.

Я хочу, чтобы код был хорошо отформатирован. Кто-нибудь знает lib или что-то вроде симпатичного принтера для java-кода?

Ответы [ 9 ]

2 голосов
/ 01 ноября 2015

Google java формат отлично подходит для меня. https://github.com/google/google-java-format

После сборки maven найдите google-java-format-0.1-SNAPSHOT.jar в папке core / target и попробуйте java -jar google-java-format-0.1-SNAPSHOT.jar, чтобы просмотреть информацию об использовании.

1 голос
/ 20 мая 2010

Jalopy работает прекрасно. Вы можете использовать его CLI для автономного использования. Консольный плагин Japlopy

1 голос
/ 20 мая 2010

Вы можете запустить программу форматирования, например astyle

1 голос
/ 20 мая 2010

Вы можете использовать Eclipse или Jalopy средства форматирования кода для переформатирования сгенерированного кода.

0 голосов
/ 07 июля 2019

Для автономных инструментов командной строки с множеством параметров конфигурации, подходящих под ваш стиль форматирования кода, вы можете попробовать:

Они оба бесплатны, с открытым исходным кодом и могут форматировать не только исходный код Java (C, C ++, C # и т. Д.)

0 голосов
/ 04 июня 2017

Самый простой подход - вставить код в Java-среду eclipse и выполнить ctrl + f для выбранного кода.который отформатировал бы ваш код в легко читаемой форме.

0 голосов
/ 13 июня 2010

Я перешел с 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";

}

Я разработал утилиту codegen для Querydsl , которая отображает типы доменов Java в типы запросов. Таким образом, потребности в сериализации очень сложны. Использование шаблонов FreeMarker просто не масштабировалось. В выводе было слишком много настроек, которые лучше контролировать в Java, чем синтаксис языка шаблонов.

Это не реклама модуля Codegen. Я просто хотел подчеркнуть, что для настраиваемой сериализации FreeMarker может не масштабироваться.

0 голосов
/ 21 мая 2010

Вы можете отформатировать его при редактировании файла .java в Eclipse. Если вы не редактируете его, не имеет значения, отформатирован он или нет.

0 голосов
/ 20 мая 2010

Полагаю, я буду использовать CodeFormatter от Eclipse, как этот парень: http://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-code-formatter-from-your-code/

UPDATE: в конечном итоге с использованием 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);
}
...