MavenアーティファクトとgroupIdの命名


291

私は現在、AntからMavenにいくつかのプロジェクトを移動している最中です。私はと順応は、私が見つけるための十分に確立規則を使用したいgroupIdartifactId、私は(そこにいくつかありますが、彼らは私が思ったんだけどポイントをカバーしていない)任意の詳細な規則を見つけることができません。

このプロジェクトを例にとると、まずJavaパッケージ: com.mycompany.teatimer

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

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

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

どうしますか?

もう一つの例:

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

groupId:(com.mycompany.awesomeinhouseframework?)

artifactId:(awesome-inhouse-framework?)


1
groupIdがArtifactIdと連結されているところはどこにありますか?あなたが述べている慣習は正しいものだと思います。
Abhinav Sarkar

2
実際、Javaパッケージ名ではアンダースコアを使用できます。次を
Adriaan Koster

回答:


146

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

私には2つの単純なルールが機能します。

  • Javaパッケージ名に関するすべての制約を含むgroupIdの逆ドメインパッケージ(これは非常に一意であるため)
  • アーティファクトIDとしてのプロジェクト名(jar名に対応している必要があることに注意してください。つまり、ファイル名として無効な文字や、奇妙に見える文字が含まれていないこと)

さて、あなたとabhin4vがそれが正常であると思うなら、私はそのようにそれをします、ありがとう!
Noarth

非ハイフン(awesomeinhouseframework)とハイフン(awesome-inhouse-framework)の混合のスペルが少し変だと思います。groupidではハイフンを使用できないため、artifactidについてもハイフン以外のスペルを使用します。
MichaelKüller2017

3
「jar-name friendly」の意味を明確にしてください。
vikramvi 2017年

1
答えが明確になりました:)。
Henryk Konsek

241

奇妙さは非常に主観的であり、私は公式の推奨に従うことをお勧めします:

groupId、artifactId、およびバージョンの命名規則のガイド

  • 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(夜間)ビルドに関連付けられているため、使用しないでください。それがサードパーティのアーティファクトである場合は、それが何であれ、見た目と同じくらい奇妙なバージョン番号を使用する必要があります。

    例えば。2.02.0.11.3.1


4
私はこれらの規則を知っていますが、アーティファクト名をどのように構成するか(JAR命名規則はありません)とgroupIdと同じになる場合はどうするかについては実際には言っていません-単一のPOMを見たことがないその場合はそうです。
Noarth

@Noarth 1.アーティファクト名は自由に選択できます(ただし、名前にハイフンを使用するのが一般的です)。2.存在しない絶対的な「ルール」を探しています(素晴らしい社内フレームワークが複数のモジュールで構成されている場合はどうでしょうか)。たとえば、Spring、Maven、Hibernateなどのアーティファクトを参照してください。
Pascal Thivent

いいえ、いいえ、モジュールはありません。単純なプロジェクトだけです。実際、「素晴らしい社内フレームワーク」というプロジェクトはありません:)
Noarth

11
どうpackageですか?groupIdとの違いは何ですか?
KonstantinK

1
ArtifactIdに数値を含めることはできますか?
theonlygusti 2017年

100

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

groupId

  • com.companyname.project

artifactId

  • 事業

version

  • 0.0.1

採用の仕事として、私はまたはcom.my.company.projectとして使用するgroupId必要がありcom.client.company.projectますか?
ジャコモアルゼッタ2018年

@GiacomoAlzettaあなたはあなたがより良いギ酸塩スーツのどれでも使うことができます。いくつかの例は「com.companyName.hirePortal」または「org.compnayName.hirePortal」です。
Manwal 2018年

3
groupIdはcom.companyname.projectではなくcom.companynameである必要があります
Kamil Nekanowicz '16年

1

ただし、groupId、artifactId、およびversionIdの命名規則ガイドの公式定義では、groupIdは、管理する逆のドメイン名で始める必要があると提案していることに同意しません。

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


2
アーティファクトを中央のMavenリポジトリーにデプロイする前にドメインを所有している必要があるため、この規則により、開発者はMavenを使用できなくなります。馬鹿馬鹿しい。ドメインを所有することは、毎年かなりのコストになる可能性があります。
Tommy.Tang 2018年

1
そのドメイン名の登録を実際に所有する必要はありません。唯一の要件は、Javaパッケージ名となるグループIDが、デプロイ時に他の名前と競合しないことです。この規則は、開発者がMavenを使用することを妨げるものではありませ
バジルブルク

リポジトリのURLからパッケージ名を取得することをお勧めします。GitHubを使用している場合は、アカウントが呼び出さmyuserれてリポジトリが呼び出されmyrepo、パッケージ名を使用しますcom.github.myuser.myrepo。それは無料で、まだユニークです。
fxnn

-14

完全に一意のjarファイルを取得するには、これを考慮してください。

  • GroupID-com.companyname.project
  • ArtifactId-com-companyname-project
  • パッケージ-com.companyname.project
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.