2017-04-07 13 views
1

アプリケーションがリモートシステムに照会する必要がある場合、「リモート」パッケージを作成します。情報を取得します。これらのクラスは、リモートパッケージから漏れてはなりません。リモートパッケージ外のremote.entitiesの不正なインポートを確認する

x.y.remote.entitiesをx.y.remoteパッケージの外部にインポートするためのチェックルールがありますか?

+0

Sonarqubeの以前のバージョンの依存行列の表示はこれで良い助けになりましたが、残念ながらこの機能は最近のバージョンでは削除されました – Coc

答えて

1

質問タグからは、Checkstyleベースのソリューションも役立つことがわかります。 ImportControlのチェックは必要なだけのものでなければなりません。 Checkstyleには、それが必要な場合はSonarQube pluginがあります。

+0

もちろん、ImportControlルールは禁止されたクラスの使用をチェックするのに役立ちます。しかし、このルールは、x.y.remoteパッケージ内で使用されるx.y.remote.entitiesに対しても違反を投げます。 x.y.remoteパッケージの外側でのみ使用するかどうかを調べるためにこのルールをどのように設定するかについてのアイデア。 – Coc

1

S3688がSonarJava 4.4で追加され、特定のクラスの使用を完全に禁止しました。その面では、あなたがを実行すると動作しませんは、いくつかのパッケージでこれらのクラスの使用を許可したいと考えています。 Issue Exclusionsがでてくるところです。

あなたはその後、x.y.remoteで何に上げ、そのルールから問題を無視する除外を設定する(普遍的)x.y.remote.entitiesの使用を禁止するルールを設定します。

+0

このルールはさらに調査するのが面白そうです。しかし、どのバージョンのJavaからこのルールを利用できるのか。私たちはJava 3.9を使用していますが、私はこのルールを見つけることができません。 – Coc

+0

私の編集@Cocを参照してください。あなたは本当にアップグレードを検討する必要があります。 3.9歳は1歳以上です。それ以来多くの改善がなされています。現在のバージョンは4.8です。 –

0

PMDの主な強みの1つは、単純なXPath式を記述することで、このプロジェクトと同様に特定のプロジェクト/チームに固有のカスタムルールを簡単に作成できることです。あなたはおそらく、このルールに反復することができusing the designer

<rule name="Remote entities used outside remote package" 
     message="The remote entities should not be imported outside the remote package" 
     class="net.sourceforge.pmd.lang.rule.XPathRule" 
     language="java"> 
    <description> 
     Remote entities should not be imported outside the remote package 
    </description> 
    <priority>3</priority> 
    <properties> 
     <property name="xpath"> 
      <value> 
    //ImportDeclaration/Name[contains(@Image, '.entities') and //PackageDeclaration/Name[not(contains(@Image, '.remote'))]] 
      </value> 
     </property> 
    </properties> 
</rule> 

お知らせそれはすべてのエンティティは、任意のリモートパッケージからインポートされることを可能立ってルールを、しかし:ルールセットのXMLファイルで

は、単に次のようにカスタムルールを追加します必要に応じてそれを絞り込んでください。

+0

シナリオを実装するためのルールを書くのが簡単ではないと思います。私はそれを試して、必要に応じて説明のためにあなたに戻ってきます。答えにもう一度感謝します。 – Coc

関連する問題