3

基本的に私はパッケージを持っています...

com.me.application
com.me.application.thing
com.me.library

にあるものを除いて、に何com.me.applicationも含めることができないというルールを適用したいと思います。 com.me.librarycom.me.application.thing

これは、Javaコード、Maven、クラスパス、またはCでのリンクとほぼ同等のJavaの他のレイヤーのレベルで可能ですか?

4

4 に答える 4

4

コンパイラに強制的に実行させる代わりに、代わりにソースコード分析を使用してみませんか?

現在Sonarに組み込まれているアーキテクチャルールエンジンを使用することをお勧めします。これをビルドブレーカープラグインと組み合わせると、開発者が階層ルールに違反した場合にビルドの失敗を引き起こす可能性があります。

于 2012-09-27T17:56:46.707 に答える
3

Checkstyleのインポート制御ルールを使用してチェックを実施できます。Maven Checkstyleプラグインをpom.xmlに構成すると、違反が設定されてビルドが失敗する可能性があります。

于 2013-02-26T16:47:50.797 に答える
2

私が考えることができる唯一の方法は、AspectJを使用することです。

AspectJはアスペクト指向言語であり、個別のコンパイルプロセスを通じてアプリケーションに横断的関心事を追加するために使用されます。AspectJの古典的な使用法の1つは、シナリオに適合するポリシーの適用です。

基本的に、どのパッケージからどのコードを呼び出すかを決定するルールを宣言し、これらのルールに違反するメソッド呼び出し(またはこの場合は変数宣言)が発生するたびにコンパイルエラーをスローします。詳細については、優れた本AspectJinActionで学ぶことができます。

AspectJは、 AspectJプラグインを介してMavenビルドにうまく統合できます

また、ポリシーの適用にのみAspectJを使用する場合、バイトコードは変更されないため、追加のランタイム依存関係はありません。

于 2012-09-27T14:51:13.273 に答える
0

それぞれがjarファイルをビルドする個別のMavenプロジェクトを介して、com.me.application、com.me.application.thing、およびcom.me.libraryをビルドする必要があります。com.me.applicationのpomにはcom.me.libraryへの依存関係が含まれず、com.me.application.thingのpomにはcom.me.libraryへの依存関係が含まれます。

しかし、これは奇妙なパッケージ構造です。なぜこれを防ぎたいのですか?

于 2012-09-27T14:50:41.647 に答える