Соглашение об именовании для Maven Artifacts - PullRequest
20 голосов
/ 30 июня 2010

В настоящее время мы пытаемся воплотить в жизнь существующие проекты в нашей компании.Мы выполнили POC и в настоящее время документируем наши знания и рекомендации.Я пришел к следующему соглашению об именовании артефактов Maven.Пожалуйста, поделитесь вашими комментариями по поводу того же

Примечание: в нашей компании имя проекта всегда уникально

Для одноуровневого мультимодульного проекта maven

Parent (pom)

  • groupId: org.companyname.projectname
  • artifactId: org.companyname.projectname
  • версия: xxx

например: org.companyname.имя проекта: org.companyname.projectname-1.0.0.pom

Модули (jar)

  • groupId: org.companyname.projectname
  • artifactId: org.companyname.projectname.modulename
  • версия: xxx

например: org.companyname.projectname: org.companyname.projectname.modulename-1.0.0.jar

Длямногоуровневый многокомпонентный проект maven

Parent (pom)

  • groupId: org.companyname.projectname
  • artifactId: org.companyname.projectname
  • версия: xxx

например: org.companyname.projectname: org.companyname.projectname-1.0.0.pom

SubParent (pom)

  • groupId: org.companyname.projectname
  • artifactId: org.companyname.projectname.subcategory
  • версия: xxx

например: org.companyname.projectname: org.companyname.projectname.subcategory-1.0.0.pom

Module (jar)

  • groupId:org.companyname.projectname
  • artifactId: org.companyname.projectname.subcategory.modulename
  • версия: xxx

например: org.companyname.projectname: org.companyname.projectname.subcategory.modulename-1.0.0.jar

Ответы [ 2 ]

18 голосов
/ 30 июня 2010

IMO, вам не нужно включать org.companyname в artifactId - он просто дублирует информацию, уже присутствующую в groupId, что делает имена артефактов более длинными и менее читаемыми.

Обновление: К вашему сведению, просматривая зависимости нашего проекта, я вижу множество похожих примеров, например,

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>

<groupId>org.codehaus.mojo</groupId>
<artifactId>jboss-maven-plugin</artifactId>

<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j-fop-ext-0.20.5-complete</artifactId>

<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>

<groupId>opensymphony</groupId>
<artifactId>oscache</artifactId>

<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-libs</artifactId>

<groupId>javax.resource</groupId>
<artifactId>connector-api</artifactId>

<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>

<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>

А также во многих случаях идентификаторы группы и артефакта имеют одно и то же безусловное имя, например:

<groupId>log4j</groupId>
<artifactId>log4j</artifactId>

<groupId>velocity</groupId>
<artifactId>velocity</artifactId>

<groupId>fop</groupId>
<artifactId>fop</artifactId>

<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>

Но я не видел ни одного, имеющего полностью определенный идентификатор группы и идентичный идентификатор артефакта (который, например, для Log4J был бы org.apache.log4j:org.apache.log4j).

17 голосов
/ 30 июня 2010

Использование неквалифицированного имени для groupId , совпадающего с artifactId (например, log4j), является устаревшей практикой, которая не рекомендуется : это плохо вна уровне файловой системы он генерирует «беспорядок в хранилище», затрудняет поиск артефактов при просмотре хранилища (даже если большинство людей в настоящее время используют поисковую систему).

Рекомендуется включить ваше доменное имя в groupId , и я, конечно, не буду повторять его в artifactId (насколько мне известно, Spring - НЕ

Вот что я использую:

Parent (pom)

  • groupId: org.companyname.projectname
  • artifactId: root
  • версия: xxx

например: org.companyname.projectname: root-1.0.0.pom

SubParent (pom)

  • groupId: org.companyname.projectname
  • artifactId: subcategory-parent
  • версия: xxx

например: org.companyname.projectname: subcategory-parent-1.0.0.pom

Модуль (jar)

  • groupId: org.companyname.projectname
  • artifactId:modulename
  • версия: xxx

например: org.companyname.projectname: modulename-1.0.0.jar

И я также использую соглашения для <description>Elemen• иметь четкий обзор при сборке реактора.Вот пример проекта для домашних животных:

$ mvn compile
[INFO] Scanning for projects...
[INFO] Reactor build order: 
[INFO]   Personal Sandbox - Samples - Parent POM
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample
[INFO]   Personal Sandbox - Tools - Parent POM
[INFO]   Personal Sandbox - Tools - Shared Verification Resources
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Services
[INFO]   Personal Sandbox - Samples - EJB3 and Cargo Sample - Functests
[INFO]   Sandbox Externals POM

Это в значительной степени вдохновлено тем, как Винсент Массол организовывал большие сборки, как он это делал с XWiki или Cargo.

...