Artefacto de Maven y nomenclatura de ID de grupo
Actualmente estoy en el proceso de trasladar algún proyecto de Ant a Maven. Conformista como soy, quiero usar convenciones bien establecidas para encontrar groupId
y artifactId
, pero no puedo encontrar ninguna convención detallada (hay algunas, pero no cubren los puntos sobre los que tengo dudas).
Tomemos este proyecto, por ejemplo, primero el paquete Java:com.mycompany.teatimer
Tea timer consta en realidad de dos palabras, pero las convenciones de nomenclatura de paquetes de Java prohíben la inserción de guiones bajos o guiones, por lo que lo escribiré todo junto.
Elegí el groupId
ID del paquete idéntico porque creo que es una buena idea. ¿Lo es?
Finalmente, tengo que elegir uno artifactId
, elegí actualmente teatimer
. Pero cuando miro otros proyectos de Maven, usan guiones para dividir palabras en artifactId
s, así: tea-timer
. Pero parece extraño cuando se concatena con groupId
: com.mycompany.teatimer.tea-timer
.
¿Cómo harías esto?
Otro ejemplo:
Nombre del paquete:com.mycompany.awesomeinhouseframework
groupId
: com.mycompany.awesomeinhouseframework
(?)
artifactId
: awesome-inhouse-framework
(?)
La rareza es muy subjetiva, sólo sugiero seguir la recomendación oficial:
Guía para convenciones de nomenclatura en groupId, artefactoId y versión
groupId
identificará su proyecto de forma única en todos los proyectos, por lo que debemos aplicar un esquema de nomenclatura. Tiene que seguir las reglas de nombres de paquetes, lo que significa que debe ser al menos un nombre de dominio que usted controle y puede crear tantos subgrupos como desee. Mire Más información sobre los nombres de los paquetes .p.ej.
org.apache.maven
,org.apache.commons
Una buena forma de determinar la granularidad del groupId es utilizar la estructura del proyecto. Es decir, si el proyecto actual es un proyecto de varios módulos, debe agregar un nuevo identificador al ID de grupo principal.
p.ej.
org.apache.maven
,org.apache.maven.plugins
,org.apache.maven.reporting
artifactId
es el nombre del jar sin versión. Si lo creaste, puedes elegir el nombre que quieras con letras minúsculas y sin símbolos extraños. Si se trata de un frasco de terceros, debe tomar el nombre del frasco tal como se distribuye.p.ej.
maven
,commons-math
version
si lo distribuyes, puedes elegir cualquier versión típica con números y puntos (1.0, 1.1, 1.0.1, ...). No utilice fechas, ya que normalmente están asociadas con compilaciones SNAPSHOT (todas las noches). Si se trata de un artefacto de terceros, debes usar su número de versión, sea cual sea y por más extraño que parezca.p.ej.
2.0
,2.0.1
,1.3.1
Su convención parece razonable. Si estuviera buscando su marco en el repositorio de Maven, lo buscaría awesome-inhouse-framework-x.y.jar
en el com.mycompany.awesomeinhouseframework
directorio del grupo. Y lo encontraría allí según su convención.
Dos reglas simples funcionan para mí:
- paquetes de dominio inverso para groupId (ya que son bastante únicos) con todas las restricciones relacionadas con los nombres de los paquetes Java
- nombre del proyecto como artefactoId (teniendo en cuenta que debe ser compatible con el nombre jar, es decir, no contener caracteres que tal vez no sean válidos para un nombre de archivo o que simplemente parezcan extraños)