2010-05-20 7 views
5

Ich benutze FreeMarker, um Java-Code zu generieren, aber da das meiste davon dynamisch erzeugt wird, ist es schwierig, die Code-Bildung zu kontrollieren.Java-Code-Formatierung

Ich möchte Code gut formatiert bekommen. Kennt jemand eine Lib oder so etwas wie einen hübschen Drucker für Java-Code?

+0

http://stackoverflow.com/questions/996646/stand-alone-java-code-formatter-beautifier-pretty-printer –

Antwort

0

ich denke, ich Eclipse CodeFormatter verwenden, genau wie dieser Kerl: http://ssscripting.wordpress.com/2009/06/10/how-to-use-the-eclipse-code-formatter-from-your-code/

UPDATE: landete mit jastyle (http://sourceforge.net/projects/jastyle/). hier ein Beispiel:

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

Sie können Codeformatierer Eclipse oder Jalopy verwenden, um generierten Code neu zu formatieren.

+0

aber ich möchte es programmatisch tun. Eclipse Code-Formater kann als eigenständige lib verwendet werden? –

+0

Theoretisch ja, aber wird keine triviale Übung sein. Aber ich glaube, dass jalopy formatter viel einfacher eingebettet werden kann. –

+0

Ja, meine erste Implementierung wurde mit dem Formatierer von Eclipse gemacht. aber ich habe das mit http: // sourceforge ausgetauscht.net/projects/jastyle/wegen seiner Einfachheit. –

1

Sie können ein Formatierungsprogramm wie astyle

+0

Kennen Sie eine lib in Java, die das gleiche tut. Ich möchte einen in mein Projekt aufnehmen und alle generierten Zeichenfolgen an den Formatierer übergeben. –

+1

und es gibt einen Java-Port: http://sourceforge.net/projects/jastyle/ –

0

Sie können es formatiert werden, wenn Sie die .java-Datei in Eclipse bearbeiten. Wenn Sie es nicht bearbeiten, ist es egal, ob es formatiert ist oder nicht.

0

Ich wechselte von FreeMarker zu meinem eigenen Java-Quellcode-Generierungsprogramm. Die Quellen sind von hier zugänglich: https://source.mysema.com/svn/mysema/projects/codegen/trunk/

Es ist so konzipiert, dass Sie nur die API aufrufen und die Ausgabe richtig formatiert ist. Hier ein Beispiel:

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(); 

Welche verwandelt sich in

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"; 

} 

ich das codegen Dienstprogramm für Querydsl entwickelt, die Spiegel Java Domain-Typen in Abfragetypen. Daher sind die Anforderungen an die Serialisierung sehr komplex. Mit FreeMarker Vorlagen einfach skalieren nicht. Es gab zu viel Anpassung in der Ausgabe, die in Java besser zu steuern ist als eine Vorlagensprachensyntax.

Dies ist keine Werbung für das Codegen-Modul. Ich wollte nur betonen, dass FreeMarker für eine hochgradig anpassbare Serialisierung nicht skalierbar ist.

+0

Die Quellen wurden nach https://source.mysema.com/svn/mysema/projects/deprecated/codegen/trunk verschoben – migu

1

Google Java-Format funktioniert perfekt für mich. https://github.com/google/google-java-format

Nach Maven bauen, suchen Sie die Google-java-Format-0,1-SNAPSHOT.jar in Kern/Zielordner, und versuchen java -jar google-java-format-0.1-SNAPSHOT.jar Nutzungsinformationen zu sehen.

0

Der einfachste Ansatz wäre, Ihren Code in die Eclipse Java IDE einzufügen und eine Strg + F auf den ausgewählten Code anzuwenden. Das würde Ihren Code in leicht lesbarer Form formatieren.