階層ディレクトリ構造を持つ複数モジュール プロジェクトでの Maven 命名規則 (groupId、artifactId、およびディレクトリ名) について質問があります。
リサーチ
尋ねる前に、私はこのトピックについて他の Web を調べ、自分で解決したことを調べました。
命名規則のガイドに は、例が示されています。
groupIdはすべてのプロジェクトでプロジェクトを一意に識別するため、命名スキーマを適用する必要があります。パッケージ名の規則に従う必要があります (例: org.apache.maven、org.apache.commons、org.apache.maven.plugins)。
artifactId作成した場合は、小文字を使用し、奇妙な記号を使用せずに、任意の名前を選択できます。(例: maven、commons-math)
これは非常に簡単で理解できますが、まだ不明な点がいくつかあります。
規約に記載されているartifactIdの例は、1 レベルの階層モジュールにのみ適用できます。
例
Maven リポジトリを調べて、いくつかの例を抽出しました。
Springは主に、spring-core、spring-context、spring-context-support という名前を使用します。スタンドアロン モジュールはすべて 1 レベルの階層であり、検索効率を高めるための spring- プレフィックスです。階層はそれほど深くないので問題ありません。
Apache CXFの命名は、Apache にとってはまったく型にはまらないものです。アーティファクトは、最大 5 つの異なるアーティファクトを名前に持つスタンドアロン モジュールです。cxf-tools-wsdlto-databinding-jaxb.
複数のモジュール プロジェクト (cxf-rt) にグループ化できる多くのアーティファクト (cxf-rt-databinding-jaxb、cxf-rt-databinding-aegis、cxf-rt-databinding-xmlbeans、cxf-rt-databinding-sdo) があります。 -databindings)、しかしそうではなかったため、名前はスパゲッティになりました。
最後に、Maven プラグインは、(org.apache.maven の後) 最初の複数モジュール プロジェクトであり、maven-compiler-plugin、maven-enforcer-plugin などのアーティファクトがあります。
非常に多くの例があり、artifactIds (結果としてプロジェクト ディレクトリ) の命名に関してすべてが異なる規則に従っています。
結果
例からベスト プラクティスを取り上げて、階層レベルを確認します。
1 レベルの階層の命名は (
groupId: org.organization.project
artifactId: project-portal ---.
|
project-portal-service
|
project-portal-plugins (continued on next diagram)
|
project-portal-util
(続き) 2 レベルの階層は次のようになります。
groupId: org.organization.project.plugins
artifactId: project-portal-plugins ---.
|
project-sample-plugin
|
project-another-great-plugin
|
???? (multiple module project)
クエスチョンマークが見えますか?そこが
質問
例の規則に従いました (スパゲッティ Apache CXF の例は無視します)。
- ルート - プロジェクト ポータル (例: spring-core、maven-core)
- 第 1 レベルの階層名は、ルート - project-portal-plugins (例: spring-context-support) から継承します。
- 第 2 レベルの階層名 - project-sample-plugin (例: maven-compiler-plugin)。
そして今、セーブやチェックポイントのない古いゲームのように、第 3 レベルで立ち往生しています。
- これは、より深い階層レベルの Maven の例から取得した正しいディレクトリ ネーミング パスですか?
- 単純なディレクトリ名とアーティファクト名をサポートし、より深いレベルでのスパゲッティ名を回避するために従う規則やルールはありますか?
- 単純な名前がある場合、groupId は重複したアーティファクト名 (単純さのために発生します) をリポジトリ内の競合から保存しますか?
- Web/リポジトリで名前が重複しているアーティファクトを検索して見つけることはどうですか (単純さのため)?
プロジェクト構造で、親の project-portal-liferay-plugins-themes のようなモジュールや、さらに悪いことに、子の project-portal-liferay-plugins-themes-white-puppy-wtf-name のようなモジュールを見たくありません。
上記の質問と考えられる問題のいずれかについて意見と実践を提供していただければ、私だけでなく、maven を使用しているすべての人にとっても大きな助けになります。ありがとうございました。