Eigenständiger Java-Code-Formatierer / Verschönerer / hübscher Drucker? [geschlossen]


83

Ich bin daran interessiert, mehr über die verfügbaren Optionen für hochwertige, eigenständige Quellcode-Formatierer für Java zu erfahren .

Der Formatierer muss eigenständig sein, dh er muss einen "Stapel" -Modus unterstützen , der von einer bestimmten Entwicklungsumgebung entkoppelt ist . Idealerweise sollte es auch von einem bestimmten Betriebssystem unabhängig sein . Daher ist ein integrierter Formatierer für die IDE du jour hier von geringem Interesse (es sei denn, diese IDE unterstützt den Aufruf von Formatierern im Batch-Modus, möglicherweise über die Befehlszeile). Ein in Closed-Source-C / C ++ geschriebener Formatierer, der beispielsweise nur unter Windows ausgeführt wird, ist nicht ideal, aber etwas interessant.

Ein "Formatierer" (oder "Verschönerer") ist nicht dasselbe wie ein "Stilprüfer". Ein Formatierer akzeptiert Quellcode als Eingabe, wendet Stilregeln an und erzeugt gestalteten Quellcode, der semantisch dem ursprünglichen Quellcode entspricht. Syntaktische Änderungen beschränken sich auf Dinge wie das Ändern des Codelayouts wie das Ändern von Leerzeichen oder das Organisieren von importAnweisungen. Wenn überhaupt, wird nur sehr wenig anderes Refactoring durchgeführt. Ein Stilprüfer wendet auch Stilregeln an, meldet jedoch einfach Regelverstöße, ohne geänderten Quellcode als Ausgabe zu erzeugen . Das Bild sieht also so aus:

Formatierer (erzeugt modifizierten Quellcode, der den Stilregeln entspricht)

Quellcode lesen → Styling-Regeln anwenden → Gestylten Quellcode schreiben

Style Checker (erzeugt keinen geänderten Quellcode)

Quellcode lesen → Styling-Regeln anwenden → Regelverletzungen schreiben

Weitere Erläuterungen

Lösungen müssen hochgradig konfigurierbar sein. Ich möchte in der Lage sein, meinen eigenen Stil anzugeben und nicht einfach aus einer voreingestellten Liste auszuwählen.

Außerdem suche ich keinen in Java geschriebenen Allzweck-Pretty-Drucker, der viele Dinge hübsch drucken kann. Ich möchte Java-Code formatieren.

Ich bin auch nicht unbedingt an einem einheitlichen Formatierer für viele Sprachen interessiert . Ich nehme an, es wäre schön, wenn eine Lösung andere Sprachen als Java unterstützen würde, aber das ist keine Voraussetzung.

Darüber hinaus Tools , die nur Code - Hervorhebung durchzuführen sind rechts aus .

Ich bin auch nicht an einem Webdienst interessiert. Ich möchte ein Tool, das ich lokal ausführen kann.

Schließlich müssen Lösungen nicht auf Open Source, Public Domain, Shareware, freie Software, Werbung oder irgendetwas anderes beschränkt sein. Alle Formen der Lizenzierung sind akzeptabel .


1
Ich habe etwas entwickelt, das ein eigenständiges Helios (Eclipse 3.6) ist, das nur Code formatiert. Es ist <13 MB, nur Java. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша Кошелев

Antworten:


25

JIndent (Commercial) macht was Sie wollen:

http://www.jindent.com/

Ich habe in der Vergangenheit auch Jalopy verwendet, es ist Open Source:

http://jalopy.sourceforge.net/

EDIT: Ich werde bemerken, dass Jalopy ziemlich alt ist und es keine aktuellen Updates zu geben scheint. Ich bin mir nicht ganz sicher, ob es mit Java 5/6 funktioniert. Vielleicht möchten Sie sich stattdessen Jacobe ansehen:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

Eine ausführlichere Liste der Formatierer finden Sie hier auf der Website von Roedy Green:

http://mindprod.com/jgloss/beautifier.html


Wie ist die Beziehung zwischen dem Open Source Jalopy und diesem: triemax.com/products/jalopy
Greg Mattes

Es sieht so aus, als wäre das Open Source-Projekt tot und sie haben sich für eine kommerzielle Version entschieden - produziert von Triemax. Es ist lange her, dass ich Jalopy benutzt habe, ich glaube es war mit Ant. Schauen Sie sich stattdessen Jacobe an.
Jon

Jacobe wird nicht für Java 7 aktualisiert, und TIOBE sagt, dass dies niemals der Fall sein wird.
Chris Jones

1
Es gibt auch Google-Java-Format .
Herr

14

Sie können Eclipse Reformatter auch über die Befehlszeile ausführen.

Hier ist die Eclipse-Dokumentation der Funktion

Zuerst müssen Sie eine projektspezifische Konfigurationsdatei mit Ihren Java-Code-Formatierungseinstellungen erstellen.

Speichern Sie dann {projectDirectory}/.settings/org.eclipse.jdt.core.prefsan einem anderen Ort.

Jetzt rufen Sie den Formatierer auf.

"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"

[WARNUNG] Dies scheint in Eclipse 2018 nicht mehr zu funktionieren. Verwenden Sie Eclipse Oxygen.


7

Jalopy kann von Interesse sein. Es wird an Ant angeschlossen und ist somit unabhängig von Ihrer IDE.

Astyle kann auch nützlich sein. Es ist Open Source (wie Jalopy), aber in C ++ geschrieben. Es ist auf die Formatierung von Java / C / C ++ ausgerichtet und kann stapelgesteuert sein (über Shell-Skripte oder ähnliches).


4

UPDATE: Nach meinem neuen Verständnis basierend auf einem falschen Fehlerbericht, den ich eingereicht habe: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 Die OpenMRSFormatter.xml-Datei muss tatsächlich eine Voreinstellungsdatei und keine XML sein Datei.

Eine solche Datei finden Sie hier: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

oder konvertieren Sie eine XML-exportierte Formatierungsdatei mit: cat formatter.xml | grep Einstellung | sed 's / @@'> formatter.asprefs

Danke Mischa


Hier ist etwas, das ich mit Eclipse 3.6-Gläsern gemacht habe. Es ist nur Java, Befehlszeile und sollte plattformübergreifend kompatibel sein:

http://www.sendspace.com/file/nm4ptt

Es gibt ein Shell-Skript, das eine gebündelte OpenMRSCodeFormatter.xml-Datei verwendet. Die Beispielausgabe:

misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {



public a() {
System.out.println("! I did not format this right!");
}



}misha@misha-d630:~/openmrs-code-formatter$ ./format.sh ../Test.java
Configuration Name: OpenMRSFormatter.xml
Starting format job ...
Done.
cat ../misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {

        public a() {
                System.out.println("! I did not format this right!");
        }

}misha@misha-d630:~/openmrs-code-formatter$ 

Dies basiert auf dem Beitrag hier: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

Da ich nicht weiß, wie lange der Link aktiv bleibt, werde ich den Inhalt unten beschreiben.

Dies basiert auf der Eclipse 3.6 Helios-Distribution. Ich habe die für Linux x86 verwendet, aber sie sollte für jede Version funktionieren, da ich keine (meines Wissens) plattformspezifischen JAR-Dateien verwendet habe.

Der Inhalt des Teerarchivs ist:

misha@misha-d630:~$ tar tvjf openmrs-code-formatter.tar.bz2  | sort 
tar: Record size = 8 blocks
drwxr-xr-x misha/misha       0 2010-09-11 19:32 openmrs-code-formatter/plugins/
drwxr-xr-x misha/misha       0 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/
drwxr-xr-x misha/misha       0 2010-09-11 19:38 openmrs-code-formatter/configuration/
-rw-r--r-- misha/misha  101957 2010-09-11 19:03 openmrs-code-formatter/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar
-rw-r--r-- misha/misha  107210 2010-09-11 19:32 openmrs-code-formatter/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
-rw-r--r-- misha/misha  111098 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar
-rw-r--r-- misha/misha 1147220 2010-09-11 18:45 openmrs-code-formatter/plugins/org.eclipse.osgi_3.6.0.v20100517.jar
-rw-r--r-- misha/misha    1812 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
-rw-r--r-- misha/misha  182596 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar
-rw-r--r-- misha/misha  248071 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar
-rw-r--r-- misha/misha     265 2010-09-11 19:21 openmrs-code-formatter/configuration/config.ini
-rw-r--r-- misha/misha   28554 2010-09-11 19:34 openmrs-code-formatter/OpenMRSFormatter.xml
-rw-r--r-- misha/misha   39331 2010-09-11 19:17 openmrs-code-formatter/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar
-rw-r--r-- misha/misha 4504121 2010-09-11 19:27 openmrs-code-formatter/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar
-rw-r--r-- misha/misha   47023 2010-09-11 18:42 openmrs-code-formatter/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
-rw-r--r-- misha/misha   52710 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar
-rw-r--r-- misha/misha 6451211 2010-09-11 19:32 openmrs-code-formatter/plugins/com.ibm.icu_4.2.1.v20100412.jar
-rw-r--r-- misha/misha   70928 2010-09-11 19:01 openmrs-code-formatter/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar
-rw-r--r-- misha/misha  769898 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.resources_3.6.0.v20100526-0737.jar
-rw-r--r-- misha/misha   83817 2010-09-11 19:07 openmrs-code-formatter/plugins/org.eclipse.equinox.app_1.3.0.v20100512.jar
-rw-r--r-- misha/misha   86986 2010-09-11 19:31 openmrs-code-formatter/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar
-rw-r--r-- misha/misha   90837 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.core.jobs_3.5.0.v20100515.jar
-rw-r--r-- misha/misha   91928 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar
-rwxr-xr-x misha/misha     111 2010-09-11 19:39 openmrs-code-formatter/format.sh

Relevante Jars im Plugins-Verzeichnis werden direkt aus dem Eclipse 3.6-Plugins-Verzeichnis entnommen.

Der Inhalt von config.ini ist:

misha@misha-d630:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter

format.sh ist:

misha@misha-d630:~$ more openmrs-code-formatter/format.sh 
#!/bin/bash
java -jar plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $*

und OpenMRSFormatter.xml ist hier verfügbar: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

Ich glaube, das sollte ausreichen, um sich zu reproduzieren.

Ein interessantes Projekt, das auf demselben Konzept basiert, finden Sie hier: http://code.google.com/p/maven-java-formatter-plugin/

Danke Mischa



1

Ich habe Dr. Java zum Codieren verwendet und mit einem schnellen Strg + A + Tab formatiert es alles gut mit Syntaxhervorhebung. Ich habe es auf einem Mac und Windows verwendet, weiß nicht, ob sie Linux unterstützen. Und es ist Open Source, eigenständig und kostenlos.


Durch Drücken der Tabulatortaste, wenn ein Teil des Codes ausgewählt ist, wird die Auswahl formatiert. DrJava ist auch eine schöne interaktive Registerkarte (wie ein Dolmetscher).
Dansalmo

0

Ich habe auch viel den in JRefactory ( http://jrefactory.sourceforge.net/ ) eingebetteten PrettyPrinter verwendet . Ich habe es über das Plugin für JEdit entdeckt. Ich schätzte es, weil es die bessere Javadoc-Berichterstattung hatte, die ich je gesehen habe.

Leider scheint es tot zu sein (keine Entwicklung seit 2004) und unterstützt Java5 nicht.

Übrigens bestätige ich, dass Triemax eine kommerzielle Suite ist, die auf totem Open-Source-Jalopy basiert.



0

Jalopy verarbeitet keine Anweisungen wie Listenmaterial <MyClass> ... und Flusenkommentare, die mit @ beginnen

Ich konnte das Formatieren erzwingen, indem ich alle <MyClass> in LTLTLTMyClassGTGTGT und dann @ in // @ // @ // @ änderte (ich wiederhole nur LT, GT oder // @, um sicherzustellen, dass dies nicht der Fall ist existiert bereits. Dann konnte ich Jalopy, und natürlich muss ich alles wieder auf das zurücksetzen, was es war.

Außerdem müssen Sie vor dem Ändern des <oder> sicherstellen, dass Sie keine Vergleiche wie <= oder> = usw. ändern.

Sie können dies also als die Lösung für arme Männer bezeichnen, da sie viele manuelle Schritte umfasst. Wenn ich öfter Jalopy machen würde, würde ich wahrscheinlich ein Skript mit sed schreiben, das diese Änderungen automatisch für mich vornimmt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.