web-dev-qa-db-ja.com

一貫性のあるJavaコードフォーマットをどのように適用することができますか?

開発者が同じJavaコードフォーマット規則を使用する方法を探しています。私の要件は次のとおりです。

  1. 卒業統合[.____]
    1. コードが正しくフォーマットされているかどうかを確認するタスク。これは、誤ってフォーマットされたコードが送信された場合にビルド失敗を引き起こすためにCIで使用されます。

    2. 誤ってフォーマットされたコードを修正するタスク(nice to-hane)

  2. IntelliJ統合[.___)
    1. 誤ってフォーマットされたコードは、「Refermat Code」アクションを介してIDE内に固定できます。
    2. IDE(例えば、getter/setter世代)によって生成されるコードは規則に準拠しています
  3. openjdk /oracle Javaフォーマットルールをサポート

現在使用しています spotless 次の設定で

_spotless {
  Java {
    toggleOffOn()
    Eclipse().configFile("${project.rootDir}/tools/Eclipse-Java-formatter.xml")
    indentWithSpaces()
    removeUnusedImports()
  }
}
_

IntelliJ統合の場合は、 Eclipse Code Formatter Plugin をインストールし、 設定された Spotlessと同じルールを使用します。

このアプローチは、2.2を除くすべての要件を満たしています.Intellijによって生成されたコードは、フォーマット規則に準拠する前に再フォーマットされなければなりません。さらなる問題は、コードが再フォーマットされたときに輸入が任意に命令されているように思われることである。これにより、プル要求がレビューがより困難になる、多くのスプリアスの変更が発生します。

これらの欠点に苦しんでいない別のアプローチ(例えばチェックスタイル)はありますか?

27
Antonio Dragos

私はそれを使うことができると思います p3cプラグイン

0
l0s7r
0
Ghokun

私はあなたをここに助けることができます。主に、ここに2つの主な問題を尋ねました。

誤ってフォーマットされたコードは、 "Referat Code" Actionを介してIDE内に固定できます。

このためには、を作成する必要があります。私たちの組織で特定のコードテンプレートを使用します。さて、[設定]> [コードスタイル]の下にあるこのXMLコードテンプレートをインポートする必要があります。これで、コードはデフォルトでテンプレートが書き込まれた方法がフォーマットされます。またはEclipseショートカットとしてCtrl + Shift + Fを使用する(Intellijで有効)。 OpenJDK/Oracle Javaフォーマットルールのサポートは、同じテンプレート内の面倒です。 Eclipseで提供されているデフォルト1としてコードテンプレートを参照してください。

IDE(例えばgetter/setter世代)によって生成されたコードはルールに準拠しています

これは リンク に役立ちます。カスタムコードテンプレートの書き方の詳細を調べてください。

コードの間違った形式を押したようにすべての開発者を制限するためには、Gitフックを書く必要があります。 。コードがフックのカスタムスクリプトに提供されている基本的な規則に準拠していない限り、コードをプッシュすることはできません。誰も地元のIntellijで何もする必要はありません、GitフックはリモートGit Repoから行動します。これが1つのサポート - link です。

私はあなたのコードテンプレートにそこにあるカスタマイズされたルールの問題であるため、ここに鮮明な情報を提供しました。

その他の質問:コードが正しくフォーマットされているかどうかを確認するタスク]これは、誤ってフォーマットされたコードが送信された場合にビルド失敗を引き起こすためにCIで使用されます。

Gitフックを使用してコミットされたコードを制限するときは、レポ上でフォーマットされていないコードは決してありません。だから、あなたはCIビルドの一部としてそれを必要としません。それはあなたのコードのgit場所を持つメソッドをトリガーするパイプラインスクリプトを提供することによって行われるかもしれません。それは私に面倒なことに見えます。あなたのすべての質問は答えられます。

0
hi.nitish