Артефакт Maven та найменування groupId


291

На даний момент я переношу якийсь проект від Мурахи до Мейвена. Конформістський , як я, я хочу використовувати добре зарекомендували конвенції для пошуку groupIdі artifactId, але я не можу знайти якісь - або докладні угоди (є деякі, але вони не покривають точки я задаюся питанням о).

Візьмемо для прикладу цей проект, спочатку пакет Java: com.mycompany.teatimer

Чайний таймер - це насправді два слова, але конвенції про іменування пакету Java забороняють вставляти підкреслення або дефіси, тому я пишу це разом.

Я вибрав groupIdідентичний ідентифікатору пакету, тому що думаю, що це гарна ідея. Є це?

Нарешті, я повинен вибрати artifactId, на який я пішов teatimer. Але коли я дивлюся на інших проектах Maven, вони використовують дефіс для розділення слів в artifactIdсек, як це: tea-timer. Але це виглядає дивно , коли приєднувалися до groupId: com.mycompany.teatimer.tea-timer.

Як би ти це зробив?

Ще один приклад:

Назва пакету: com.mycompany.awesomeinhouseframework

groupId: com.mycompany.awesomeinhouseframework(?)

artifactId: awesome-inhouse-framework(?)


1
Де ви бачите, що група ID об'єднується з артефактом? Я думаю, що конвенції, які ви заявляєте, є правильними.
Абхінав Саркар

2
Насправді, підкреслення дозволено у назвах пакетів Java, див.: Docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Адріан Костер

Відповіді:


146

Ваша умовність здається розумною. Якби я шукав ваші рамки в репоні Maven, я шукав би awesome-inhouse-framework-x.y.jarв com.mycompany.awesomeinhouseframeworkкаталозі груп. І я знайшов би це там, згідно з вашою умовою.

Для мене працюють два простих правила:

  • пакети зворотного домену для groupId (оскільки такі досить унікальні) з усіма обмеженнями щодо імен пакетів Java
  • назва проекту як artifactId (маючи на увазі, що воно повинно бути зручним для імені jar, тобто не містити символів, які можуть бути недійсними для імені файлу або просто виглядати дивно)

Гаразд, якщо ви і abhin4v вважаєте, що це нормально, то я зроблю це просто так, дякую!
Ноарт

Мені здається, що суміш не-дефісів (awesomeinhouseframework) та дефісів (awesome-inhouse-frame) написання трохи дивна. Оскільки групід не дозволяє дефісів, я б дотримувався написання не дефісів і для артефактиду.
Майкл Кюллер

3
Поясніть, будь ласка, що ви маєте на увазі під "jar-name friendly"?
vikramvi

1
Уточнено у відповіді :).
Генрік Консек

241

Дивацтво є дуже суб'єктивним, я просто пропоную дотримуватися офіційної рекомендації:

Керівництво по іменуванню конвенцій про groupId, artifactId та версії

  • groupIdідентифікує ваш проект однозначно для всіх проектів, тому нам потрібно застосувати схему іменування. Він повинен дотримуватися правил імені пакета, що означає, що він повинен бути як мінімум доменним іменем, яким ви керуєте, і ви можете створити стільки підгруп, скільки вам потрібно. Подивіться докладнішу інформацію про назви пакетів .

    напр. org.apache.maven,org.apache.commons

    Хороший спосіб визначити деталізацію groupId - це використовувати структуру проекту. Тобто, якщо поточний проект є проектом з декількома модулями, він повинен додати новий ідентифікатор до батьківського groupId.

    напр. org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting

  • artifactIdназва банку без версії. Якщо ви створили його, то ви можете вибрати будь-яке ім’я з малих літер і жодних дивних символів. Якщо це сторона третьої сторони, ви повинні взяти назву банки під час її розповсюдження.

    напр. maven,commons-math

  • versionякщо ви поширите його, то ви можете вибрати будь-яку типову версію з цифрами та крапками (1.0, 1.1, 1.0.1, ...). Не використовуйте дати, оскільки вони зазвичай асоціюються зі складаннями SNAPSHOT (вночі). Якщо це сторонній артефакт, ви повинні використовувати їх номер версії, як би це не було, і як би дивно це не виглядало.

    напр. 2.0, 2.0.1,1.3.1


4
Я знаю ці конвенції, але вони насправді не говорять про те, як слід складати назву артефакту (немає конвенцій про іменування JAR) і що робити, якщо це буде те саме, що і groupId - я не бачив жодного POM де це так.
Ноарт

@Noarth 1. Назва артефакту на ваш розсуд (але використання дефісів в імені є звичайною практикою). 2. Ви шукаєте абсолютне "правило", яке не існує (що робити, якщо ваша дивовижна структура будинку складається з декількох модулів?). Дивіться, наприклад, артефакти Весна, Мавен, Зимова сплячка тощо.
Паскаль Thivent

Ні, ні. У мене немає ніяких модулів, просто прості проекти. Насправді, у нас немає проекту під назвою "приголомшливий
будинок

11
Про що package? Яка різниця у groupId?
КостянтинК

1
Чи може артефактId мати номери в ньому?
theonlygusti

100

Розглянемо наступне, як створити основний перший додаток Maven :

groupId

  • com.companyname.project

artifactId

  • проект

version

  • 0,0.1

Як роботу в прокат я повинен використовувати com.my.company.projectяк groupIdабо com.client.company.project?
Джакомо Альзетта

@GiacomoAlzetta ви можете краще використовувати будь-який формат. Деякі приклади "com.companyName.hirePortal" або "org.compnayName.hirePortal".
Manwal

3
groupId має бути com.companyname not com.companyname.project
Каміль Неканович

1

Однак я не погоджуюсь з офіційним визначенням Посібника з іменування конвенцій щодо groupId, artifactId та версії, яка пропонує groupId повинен починатися із зворотного доменного імені, яким ви керуєте.

comозначає, що цей проект належить компанії, і orgозначає, що цей проект належить до соціальної організації. Це добре, але для таких дивних доменів, як xxx.tv, xxx.uk, xxx.cn, не має сенсу називати groupId, розпочате з "tv.", "Cn.", GroupId має надавати основну інформацію проекту, а не домену.


2
Ця конвенція забороняє розробникам використовувати maven через те, що ви повинні володіти доменом перед тим, як розгорнути свої артефакти до центрального сховища Maven. Це смішно. Володіння доменом може бути досить дорогим за роком.
Tommy.Tang

1
Немає жодної вимоги фактично володіти реєстрацією цього доменного імені. Єдина вимога - щоб ваш ідентифікатор групи, який буде іменем вашого пакета Java, не конфліктував з будь-яким іншим таким іменем при розгортанні. Ця конвенція, безумовно, не заважає розробникам використовувати Maven.
Василь Бурк

Доброю практикою є отримання назв пакетів з URL-адреси сховища. Якщо ви використовуєте GitHub, ваш обліковий запис викликається, myuserа ваш сховище викликається myrepo, тоді просто використовуйте назву пакета com.github.myuser.myrepo. Це безкоштовно і все-таки унікально.
fxnn

-14

Розглянемо це, щоб отримати повністю унікальний файл jar:

  • GroupID - com.companyname.project
  • ArtifactId - com-companyname-проект
  • Пакет - com.companyname.project
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.