スタンドアロンのJavaコードフォーマッター/ビューティファイアー/プリティプリンター?[閉まっている]


84

Java用高品質のスタンドアロンソースコードフォーマッタの利用可能な選択肢について知りたいと思っています。

フォーマッタはスタンドアロンである必要があります。つまり、特定の開発環境から切り離され「バッチ」モードをサポートしている必要があります。理想的には、特定のオペレーティングシステムからも独立している必要があります。したがって、IDE du jourの組み込みフォーマッタは、ここではほとんど関心がありません(IDEが、おそらくコマンドラインからのバッチモードフォーマッタの呼び出しをサポートしている場合を除く)。たとえば、Windowsでのみ実行されるクローズドソースC / C ++で記述されたフォーマッタは理想的ではありませんが、やや興味深いものです。

明確にするために、「フォーマッター」(または「ビューティファイアー」)は「スタイルチェッカー」と同じではありません。フォーマッタは、入力としてソースコードを受け入れ、スタイリングルールを適用し、元のソースコードと意味的に同等のスタイル付きソースコードを生成します。構文の変更は、空白の変更やimportステートメントの整理など、コードレイアウトの変更などに限定されます。他のリファクタリングは、あるとしてもごくわずかしか実行されません。スタイルチェッカーもスタイリングルールを適用しますが、変更されたソースコードを出力として生成せずに、ルール違反報告するだけです。したがって、画像は次のようになります。

フォーマッター(スタイリングルールに準拠する変更されたソースコードを生成します)

ソースコードの読み取り→スタイリングルールの適用→スタイル付きソースコードの記述

スタイルチェッカー(変更されたソースコードを生成しません)

ソースコードの読み取り→スタイリングルールの適用→ルール違反の書き込み

さらなる明確化

ソリューションは高度に構成可能である必要があります。プリセットリストから選択するだけでなく、自分のスタイルを指定できるようにしたい。

また、Java記述された、多くのものをプリティプリントできる汎用のプリティプリンターを探しいません。Javaコードのスタイルを設定したい。

また、多くの言語の大統一フォーマッター必ずしも興味がありません。ソリューションがJava以外の言語をサポートしているのは良いことだと思いますが、それは必須ではありません。

さらに、コードの強調表示のみを実行するツールすぐに利用 できます。

Webサービスに興味がありません。ローカルで実行できるツールが必要です。

最後に、ソリューションは、オープンソース、パブリックドメイン、シェアウェア、フリーソフトウェア、商用、またはその他のものに制限される必要はありません。すべての形式のライセンスが受け入れられます。


1
コードのフォーマットのみを行うスタンドアロンのHelios(Eclipse 3.6)である何かを作り上げました。<13 MB、Javaのみです。openmrs-mailing-list-archives.1560443.n2.nabble.com/...
МишаКошелев

回答:


25

JIndent(Commercial)はあなたが望むことをします:

http://www.jindent.com/

私も過去にこれを行うためにJalopyを使用しました、それはオープンソースです:

http://jalopy.sourceforge.net/

編集:Jalopyはかなり古く、最近の更新はないようです。Java5 / 6で動作するかどうかはよくわかりません。代わりにジェイコブを見たいと思うかもしれません:

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

Roedy Greenのサイトには、フォーマッターのより完全なリストもあります。

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


オープンソースのJalopyとこれとの関係は何ですか:triemax.com/products/jalopy
Greg

オープンソースプロジェクトは死んでいるようで、Triemaxによって作成された商用バージョンを採用することにしました。Jalopyを使ってから久しぶりですが、Antと一緒だったと思います。代わりにジェイコブを見てください。
ジョン

JacobeはJava7用に更新されておらず、TIOBEは更新されないと述べています。
クリスジョーンズ


14

コマンドラインからEclipsereformatterを実行することもできます。

これがこの機能のEclipseドキュメントです

まず、Javaコードフォーマッタ設定のプロジェクトに固有の構成ファイル作成する必要があります。

次に{projectDirectory}/.settings/org.eclipse.jdt.core.prefs、別の場所に保存します。

次に、フォーマッタを呼び出します。

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

[警告]これはEclipse2018で機能しなくなったようです。EclipseOxygenを使用してください。


7

Jalopyは興味深いかもしれません。Antにプラグインするため、IDEから独立しています。

Astyleも役立つかもしれません。オープンソース(Jalopyなど)ですが、C ++で記述されています。Java / C / C ++のフォーマットを対象としており、バッチ駆動型にすることができます(シェルスクリプトなどを介して)


4

更新:私が提出した誤ったバグレポートに基づく私の新しい理解によると:https ://bugs.eclipse.org/bugs/show_bug.cgi?id = 325289 OpenMRSFormatter.xmlファイルは、実際にはXMLではなく設定ファイルである必要がありますファイル。

このようなファイルはここにあります:https//bugs.eclipse.org/bugs/attachment.cgi?id = 178874

または、XMLでエクスポートされたフォーマッターファイルを次のコマンドで変換します。catformatter.xml| grep設定| sed's / @@ '> formatter.asprefs

ありがとうミーシャ


これは私がEclipse3.6jarを使用して作成したものです。これはJavaのみのコマンドラインであり、クロスプラットフォーム互換である必要があります。

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

バンドルされたOpenMRSCodeFormatter.xmlファイルを使用するシェルスクリプトがあります。サンプル出力:

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$ 

これは、ここの投稿に基づいています:http//www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

リンクがいつまで続くかわからないので、以下に内容を説明します。

これは、Eclipse 3.6Heliosディストリビューションに基づいています。Linux x86用のものを使用しましたが、(私の知る限り)プラットフォーム固有のJARファイルを使用しなかったため、どのバージョンでも機能するはずです。

tarアーカイブの内容は次のとおりです。

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

プラグインディレクトリ内の関連するjarは、Eclipse3.6プラグインディレクトリから直接取得されます。

config.iniの内容は次のとおりです。

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は次のとおりです。

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 $*

OpenMRSFormatter.xmlはここから入手できます:http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version = 1&modificationDate = 1282168038000

再現するにはそれで十分だと思います。

同じ概念に基づく興味深いプロジェクトがここにあります:http//code.google.com/p/maven-java-formatter-plugin/

ありがとうミーシャ



1

私が使用するために使用博士はJavaのそれは構文の強調表示とすべてうまくそれをフォーマットし、迅速、Ctrl + A +]タブでとしてコードに。MacとWindowsで使用しましたが、Linuxをサポートしているかどうかはわかりません。そして、それはオープンソースで、スタンドアロンで、無料です。


コードのいずれかの部分が選択されているときにTabキーを押すと、選択がフォーマットされます。DrJavaは、インタラクティブな(インタプリタのような)タブでもあります。
dansalmo 2013年

0

また、JRefactory(http://jrefactory.sourceforge.net/)に埋め込まれているPrettyPrinterをたくさん使用しました。JEdi​​t用のプラグインで発見しました。私が今まで見たより良いjavadocカバレッジを持っていたので、私はそれを高く評価しました。

残念ながら、それは死んでいるように見え(2004年以降進化はありません)、実際にはJava5をサポートしていません。

ちなみに、Triemaxは死んだオープンソースのJalopyをベースにした商用スイートであることを確認しました。



0

Jalopyは、List stuff <MyClass> ...や@で始まるlintコメントなどのステートメントを処理しません。

すべての<MyClass>をLTLTLTMyClassGTGTGTに変更し、次に@を// @ // @ // @に変更することで、強制的にフォーマットすることができました(LT、GT、または// @を繰り返して、それらがないことを確認しますそれから私はJalopyをすることができました、そして明らかに私はすべてを元の状態に戻す必要があります。

また、<または>を変更する前に、<=または> =などの比較を変更しないことを確認する必要があります。

したがって、これは多くの手動手順を伴うため、これを貧乏人の解決策と呼ぶかもしれません。Jalopyをもっと頻繁に行う場合は、sedを使用してスクリプトを作成し、それらの変更を自動的に行うようにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.