362 votes

Nommage des artefacts Maven et des groupId

Je suis actuellement en train de transférer certains projets de Ant à Maven. Conformiste comme je le suis, je veux utiliser des conventions bien établies pour trouver groupId y artifactId mais je ne trouve pas de conventions détaillées (il en existe, mais elles ne couvrent pas les points sur lesquels je me pose des questions).

Prenez ce projet par exemple, d'abord le paquet Java : com.mycompany.teatimer

Minuterie à thé est en fait deux mots, mais les conventions de dénomination des paquets Java interdisent l'insertion de traits de soulignement ou de traits d'union, c'est pourquoi je les écris tous ensemble.

J'ai choisi le groupId identique à l'ID du paquet parce que je pense que c'est une bonne idée. C'est le cas ?

Enfin, je dois choisir un artifactId J'ai opté pour teatimer . Mais lorsque je regarde d'autres projets Maven, ils utilisent des traits d'union pour séparer les mots dans les documents suivants artifactId comme ceci : tea-timer . Mais il a l'air bizarre lorsqu'il est concaténé à l'adresse suivante groupId : com.mycompany.teatimer.tea-timer .

Comment feriez-vous ?

Un autre exemple :

Nom du paquet : com.mycompany.awesomeinhouseframework

groupId : com.mycompany.awesomeinhouseframework ( ?)

artifactId : awesome-inhouse-framework ( ?)

291voto

Pascal Thivent Points 295221

La bizarrerie est hautement subjective, je suggère simplement de suivre la recommandation officielle :

Guide des conventions de dénomination pour groupId, artifactId et version

  • groupId permettra d'identifier votre projet de manière unique parmi tous les projets, donc nous devons appliquer un schéma de nommage. Il doit suivre les règles de nom de paquet ce qui signifie qu'il doit être au moins au moins un nom de domaine que vous contrôlez, et vous pouvez créer autant de sous-groupes que vous voulez. Regardez Plus d'informations sur les noms de paquets .

    eg. org.apache.maven , org.apache.commons

    Une bonne façon de déterminer la granularité du groupId est d'utiliser la fonction la structure du projet. C'est-à-dire que si le projet actuel est un projet à modules multiples multiple, il doit ajouter un nouvel identifiant au groupId du parent.

    eg. org.apache.maven , org.apache.maven.plugins , org.apache.maven.reporting

  • artifactId est le nom du jar sans version. Si vous l'avez créé alors vous pouvez choisir le nom que vous que vous voulez avec des lettres minuscules et sans symboles étranges. Si c'est un jar d'une tierce partie vous devez prendre le nom de la jar tel qu'il est distribué.

    eg. maven , commons-math

  • version si vous le distribuez, vous pouvez choisir n'importe quel type de produit. version avec des chiffres et des points (1.0, 1.1, 1.0.1, ...). N'utilisez pas de dates car elles sont généralement associées aux SNAPSHOT (nightly) builds. S'il s'agit d'une artefact tiers, vous devez utiliser leur numéro de version, quel qu'il soit, et aussi étrange que cela puisse paraître.

    eg. 2.0 , 2.0.1 , 1.3.1

14 votes

Je connais ces conventions, mais elles ne disent pas vraiment comment le nom de l'artefact doit être composé (il n'y a pas de conventions de nommage JAR) et ce qu'il faut faire s'il est identique au groupId - je n'ai pas vu un seul POM où c'est le cas.

0 votes

@Noarth 1. le nom de l'artefact est à votre discrétion (mais utiliser des traits d'union dans le nom est une pratique courante). 2. Vous cherchez une "règle" absolue qui n'existe pas (que se passe-t-il si votre artefact n'a pas d'utilité ? un cadre interne impressionnant est composé de plusieurs modules ?). Voir par exemple les artefacts Spring, Maven, Hibernate, etc.

0 votes

Non, non je n'ai pas de modules, juste des projets simples. En fait, nous n'avons pas de projet appelé "awesome inhouse framework" :)

169voto

Henryk Konsek Points 3076

Votre convention semble être raisonnable. Si je cherchais votre framework dans le repo Maven, je chercherais à trouver awesome-inhouse-framework-x.y.jar en com.mycompany.awesomeinhouseframework le répertoire des groupes. Et je l'y trouverais selon votre convention.

Deux règles simples fonctionnent pour moi :

  • reverse-domain-packages pour groupId (puisque ceux-ci sont assez uniques) avec tous les contraint concernant les noms des paquets Java
  • le nom du projet comme artefactId (en gardant à l'esprit qu'il doit être compatible avec le nom de jar, c'est-à-dire qu'il ne doit pas contenir de caractères non valides pour un nom de fichier ou simplement bizarres)

1 votes

Je trouve le mélange d'orthographe sans trait d'union (awesomeinhouseframework) et avec trait d'union (awesome-inhouse-framework) un peu étrange. Puisque le groupid ne permet pas les traits d'union, je m'en tiendrais à l'orthographe sans trait d'union pour l'artifactid également.

4 votes

Veuillez préciser ce que vous entendez par "jar-name friendly" ?

115voto

Manwal Points 17668

Considérez les points suivants pour construire la première base Maven application :

groupId

  • com.companyname.project

artifactId

  • projet

version

  • 0.0.1

0voto

Tommy.Tang Points 131

Cependant, je ne suis pas d'accord avec la définition officielle de Guide des conventions de nommage sur groupId, artifactId et version qui propose que le groupId doit commencer par un nom de domaine inversé que vous contrôlez.

com signifie que ce projet appartient à une entreprise, et org signifie que ce projet appartient à une organisation sociale. Ceux-ci sont corrects, mais pour ces domaines étranges comme xxx.tv, xxx.uk, xxx.cn, cela n'a pas de sens de nommer le groupId en commençant par "tv.", "cn.", le groupId devrait fournir les informations de base du projet plutôt que le domaine.

-21voto

coder Points 3

Considérez ceci pour obtenir un fichier jar totalement unique :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X