Названия артефактов Maven и groupId - PullRequest
244 голосов
/ 16 сентября 2010

Я сейчас нахожусь в процессе переноса какого-то проекта из Ant в Maven. Конформист, как и я, я хочу использовать общепринятые соглашения для поиска groupId и artifactId, но я не могу найти никаких подробных соглашений (есть некоторые, но они не охватывают вопросы, которые меня интересуют ).

Возьмем, к примеру, этот проект, сначала пакет Java: com.mycompany.teatimer

Таймер чая на самом деле два слова, но соглашения об именах пакетов Java запрещают вставку символов подчеркивания или дефиса, поэтому я пишу все это вместе.

Я выбрал groupId, идентичный идентификатору пакета, потому что я думаю, что это хорошая идея. Это 1013 *

Наконец, мне нужно выбрать artifactId, я сейчас выбрал teatimer. Но когда я смотрю на другие проекты Maven, они используют дефисы для разделения слов в artifactId s, например: tea-timer. Но это выглядит странно, когда соединяется с groupId: com.mycompany.teatimer.tea-timer.

Как бы вы это сделали?

Другой пример:

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

groupId: com.mycompany.awesomeinhouseframework (?)

artifactId: awesome-inhouse-framework (?)

Ответы [ 5 ]

215 голосов
/ 16 сентября 2010

Странность очень субъективна, я просто предлагаю следовать официальной рекомендации:

Руководство по соглашениям о присвоении имен для groupId, artifactId и версии

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

    например. org.apache.maven, org.apache.commons

    Хороший способ определить гранулярность 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

114 голосов
/ 16 сентября 2010

Ваше соглашение кажется разумным.Если бы я искал ваш фреймворк в репозитории Maven, я бы искал awesome-inhouse-framework-x.y.jar в com.mycompany.awesomeinhouseframework каталоге группы.И я нашел бы его там в соответствии с вашим соглашением.

У меня работают два простых правила:

  • обратные доменные пакеты для groupId (поскольку они довольно уникальны) со всеми ограничивает в отношении имен пакетов Java
  • имя проекта как artifactId (имея в виду, что оно должно быть удобным для имени jar, т.е. не содержать символов, которые могут быть недопустимыми для имени файла или выглядят странно)1012 *
81 голосов
/ 25 августа 2015

Рассмотрим следующее для создания базового первого Maven приложения:

groupId

  • com.companyname.project

artifactId

  • Проект

version

  • 0.0.1
0 голосов
/ 22 октября 2018

Однако я не согласен с официальным определением Руководства по соглашениям об именах для groupId, artifactId и версии , в котором предлагается, чтобы groupId начинался с обратного доменного имени, которым вы управляете.

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

0 голосов
/ 21 марта 2017

Учтите это, чтобы получить полностью уникальный файл jar:

  • GroupID - com.companyname.project
  • ArtifactId - com-companyname-project
  • Packagecom.companyname.project
...