it-swarm.com.de

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

Ich möchte mehr über die verfügbaren Optionen vonhochwertigen, eigenständigen Quellcode-Formatierern für Java erfahren .

Der Formatierer muss eigenständig sein, dh einen"Batch" -Modusunterstützen, der von einer bestimmten Entwicklungsumgebung abgekoppelt ist. Im Idealfall sollte esauch unabhängig von einem bestimmten Betriebssystemsein. Daher ist ein eingebauter Formatierer für IDE du jour hier von geringem Interesse (es sei denn, dieser IDE unterstützt den Aufruf eines Stapelmodus-Formatierers, 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 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 das ist semantisch äquivalent zum ursprünglichen Quellcode. Syntaktische Änderungen beschränken sich auf das Ändern des Code-Layouts wie das Ändern von Leerzeichen oder das Organisieren von import-Anweisungen. Wenn überhaupt, wird nur sehr wenig anderes Refactoring durchgeführt. Ein Stilprüfer wendet auch Stilregeln an, aber es werden einfach Berichte Regelverstöße ohne geänderten Quellcode zu erzeugen als Ausgabe ausgegeben. Das Bild sieht also so aus:

Formatter(Erzeugt modifizierten Quellcode, der den Stilregeln entspricht)

Quellcode lesen → Styling-Regeln anwenden → Styling-Quellcode schreiben

Style Checker(erzeugt keinen modifizierten Quellcode)

Quellcode lesen → Styling-Regeln anwenden → Regelverstöße schreiben

Weitere Erläuterungen

Lösungen müssen hochgradig konfigurierbar sein. Ich möchte meinen eigenen Stil festlegen können und nicht einfach aus einer voreingestellten Liste auswählen.

Außerdem bin ichnicht auf der Suche nach einem in Java geschriebenen Allzweck-Hübschdrucker, der viele Dinge hübsch drucken kann. Ich möchte Java-Code formatieren.

Ich bin auchnicht unbedingt an einem Grand-Unified-Formatiererfür viele Sprachen interessiert. Ich nehme an, es ist gut, wenn eine Lösung andere Sprachen als Java unterstützt, aber das ist keine Voraussetzung.

Darüber hinaus sindTools, die nur das Hervorheben von Code ausführenrightout .

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

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

78
Greg Mattes

JIndent (Commercial) macht was Sie wollen:

http://www.jindent.com/

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

http://jalopy.sourceforge.net/

EDIT: Ich werde bemerken, dass Jalopy ziemlich alt ist und es keine neuen Updates gibt. 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

Es gibt auch eine vollständigere Liste von Formatierern hier auf Roedy Green's Site:

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

25
Jon

Sie können den Eclipse-Reformatter auch über die Befehlszeile ausführen. Check out dieser Blogeintrag

14
notnoop

Jalopy kann von Interesse sein. Es wird in Ant eingesteckt 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 batchgesteuert werden (über Shell-Skripts oder ähnliches).

6
Brian Agnew

UPDATE: Nach meinem neuen Verständnis basierend auf einem fehlerhaften Fehlerbericht habe ich eingereicht: https://bugs.Eclipse.org/bugs/show_bug.cgi?id=325289 .__ Die Datei OpenMRSFormatter.xml muss eigentlich eine Voreinstellungsdatei und keine XML-Datei sein.

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

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

Vielen Dank. Misha


Hier ist etwas, was 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 mitgelieferte OpenMRSCodeFormatter.xml-Datei verwendet. Die Beispielausgabe:

[email protected]:~/openmrs-code-formatter$ cat ../Test.Java
public class Test {



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



}[email protected]:~/openmrs-code-formatter$ ./format.sh ../Test.Java
Configuration Name: OpenMRSFormatter.xml
Starting format job ...
Done.
cat ../[email protected]:~/openmrs-code-formatter$ cat ../Test.Java
public class Test {

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

}[email protected]:~/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 bestehen bleibt, werde ich den Inhalt unten beschreiben.

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

Der Inhalt des tar-Archivs besteht aus:

[email protected]:~$ 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 abgerufen.

Die Inhalte von config.ini sind:

[email protected]:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:[email protected]\:start
org.Eclipse.equinox.simpleconfigurator.configUrl=file\:org.Eclipse.equinox.simpleconfigurator/bundles.info
Eclipse.application=org.Eclipse.jdt.core.JavaCodeFormatter

format.sh ist:

[email protected]:~$ more openmrs-code-formatter/format.sh 
#!/bin/bash
Java -jar plugins/org.Eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $*

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 es zu reproduzieren.

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

Vielen Dank. Misha

Versuchen Sie "Jacobe Code Beautifier":

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

Die persönliche Ausgabe ist kostenlos.

1
user152102

Ich benutzte Dr. Java zum Codieren in und mit einem schnellen Strg + A + -Tab formatiert es alles schön mit Syntaxhervorhebung. Ich habe es auf einem Mac und Windows verwendet, weiß nicht, ob sie Linux unterstützen. Und es ist Open Source, allein stehend und kostenlos.

1
Petey B

In unserem Java Formatter finden Sie ein Tool, das alle Dialekte von Java einschließlich Version 7 behandelt.

0
Ira Baxter

Ich habe auch viel den in JRefactory eingebetteten PrettyPrinter ( http://jrefactory.sourceforge.net/ ) verwendet. Ich habe es durch sein 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 Evolution seit 2004) und unterstützt eigentlich kein Java5.

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

0

Jalopy verarbeitet keine Statements wie List stuff <MyClass> ... und Fusseln-Kommentare, die mit @ beginnen

Ich konnte die Formatierung erzwingen, indem alle <MyClass> in LTLTLTMyClassGTGTGT und dann @ in // @ // @ // @ geändert werden (ich wiederhole nur LT, GT oder // @, um sicherzustellen, dass dies nicht der Fall ist Es gibt bereits. Dann konnte ich Jalopy, und natürlich muss ich alles wieder so ersetzen, wie es war.

Vor dem Ändern von <oder> müssen Sie außerdem sicherstellen, dass Sie keine Vergleiche wie <= oder> = usw. ändern.

Man könnte dies die arme Mannlösung nennen, weil es viele manuelle Schritte erfordert. Wenn ich häufiger Jalopy machen sollte, würde ich wahrscheinlich ein Skript schreiben, das sed verwendet, um diese Änderungen automatisch für mich vorzunehmen.

0
cpu