web-dev-qa-db-ja.com

MavenアーティファクトとグループIDの命名

私は現在、AntからMavenへのプロジェクトの移行を進めています。私としては、groupIdartifactIdを見つけるための確立された規約を使いたいのですが、詳細な規約は見当たりません(いくつかありますが、私が考えている点をカバーしていません)。

このプロジェクトを例にとりましょう。最初はJavaパッケージです:com.mycompany.teatimer

ティータイマーは実際には2つの単語ですが、Javaパッケージの命名規則ではアンダースコアやハイフンの挿入は禁止されているので、まとめて書いています。

私はgroupIdをパッケージIDと同じものにしました。なぜならそれは良い考えだと思うからです。それは...ですか?

最後に、私はartifactIdを選ぶ必要があります、私は現在teatimerに行きました。しかし、他のMavenプロジェクトを見ると、ハイフンを使用してartifactIdsで単語を分割しています。これはtea-timerです。 groupIdcom.mycompany.teatimer.tea-timerに連結すると奇妙に見えます。

どうしますか?

もう一つの例:

パッケージ名:com.mycompany.awesomeinhouseframework

groupIdcom.mycompany.awesomeinhouseframework(?)

artifactIdawesome-inhouse-framework(?)

241
Noarth

あなたの慣習は合理的なようです。私がMavenリポジトリであなたのフレームワークを探していたら、私はawesome-inhouse-framework-x.y.jarグループディレクトリでcom.mycompany.awesomeinhouseframeworkを探すでしょう。そして私はそれをあなたの慣習に従ってそこに見つけるでしょう。

2つの簡単な規則が私には役立ちます。

  • groupId用のreverse-domain-packages(これはとても独特なので) - Javaパッケージ名に関する全ての 制約
  • artifactIdとしてのプロジェクト名(jar名にやさしいもの、つまりファイル名としては無効である可能性がある文字、または単に変に見える文字を含まないようにする必要があることに注意してください)
113
Henryk Konsek

奇妙さは非常に主観的です、私はただ公式の勧告に従うことを勧めます:

groupId、artifactId、およびversionの命名規則のガイド

  • groupIdはあなたのプロジェクトをすべてのプロジェクトで一意に識別しますので、命名スキーマを強制する必要があります。パッケージ名の規則に従う必要があります。つまり、少なくとも自分が制御するドメイン名と同じでなければならず、必要に応じていくつでもサブグループを作成できます。 パッケージ名に関するさらなる情報を見てください

    例えば。 org.Apache.mavenorg.Apache.commons

    GroupIdの粒度を判断するための良い方法は、プロジェクト構造を使用することです。つまり、現在のプロジェクトがマルチモジュールプロジェクトの場合は、親のgroupIdに新しい識別子を追加する必要があります。

    例えば。 org.Apache.mavenorg.Apache.maven.pluginsorg.Apache.maven.reporting

  • artifactIdは、バージョンを除いたjarの名前です。あなたがそれを作成したのであれば、あなたは小文字で奇妙なシンボルなしであなたが望むどんな名前でも選ぶことができます。それがサードパーティ製のjarファイルであれば、配布されているjarファイルの名前を取る必要があります。

    例えば。 mavencommons-math

  • version配布する場合は、数字とドット(1.0、1.1、1.0.1、...)を含む一般的なバージョンを選択できます。通常、SNAPSHOT(nightly)ビルドに関連付けられているため、日付は使用しないでください。それがサードパーティのアーティファクトである場合、あなたはそれが何であれ、そしてそれが見えることができるのと同じくらい奇妙に彼らのバージョン番号を使わなければなりません。

    例えば。 2.02.0.11.3.1

214
Pascal Thivent

基本的な最初の構築に関しては以下を検討してくださいMavenアプリケーション:

groupId

  • com.companyname.project

artifactId

  • プロジェクト

version

  • 0.0.1
80
Manwal

ただし、 groupId、artifactId、およびversionの命名規則へのガイド の正式な定義には同意できません。これは、groupIdは、ユーザーが制御するドメイン名を逆にして開始する必要があることを示しています。

comは、このプロジェクトが会社に属していることを意味し、orgは、このプロジェクトが社会組織に属していることを意味します。これらは大丈夫ですが、xxx.tv、xxx.uk、xxx.cnのような奇妙なドメインの場合、groupIdに "tv。"、 "cn。"で始まる名前を付けても意味がありません。groupIdは基本情報を提供する必要があります。ドメインではなくプロジェクトの.

0
Tommy.Tang