Artefato do Maven e identificação de grupo

291

Atualmente, estou no processo de mudar algum projeto do Ant para o Maven. Conformista como sou, quero usar convenções bem estabelecidas para encontrar groupIde artifactId, mas não consigo encontrar convenções detalhadas (existem algumas, mas elas não cobrem os pontos que estou pensando).

Tome este projeto, por exemplo, primeiro o pacote Java: com.mycompany.teatimer

O cronômetro do chá é na verdade duas palavras, mas as convenções de nomenclatura de pacotes Java proíbem a inserção de sublinhados ou hífens, por isso estou escrevendo tudo isso junto.

Eu escolhi o groupIdidêntico ao ID do pacote porque acho uma boa ideia. É isso?

Finalmente, eu tenho que escolher um artifactId, eu fui no momento teatimer. Mas quando eu olhar para outros projetos Maven, eles usam hífens para dividir palavras artifactIds, como este: tea-timer. Mas parece estranho quando concatenado com o groupId: com.mycompany.teatimer.tea-timer.

Como você faria isso?

Outro exemplo:

Nome do pacote: com.mycompany.awesomeinhouseframework

groupId: com.mycompany.awesomeinhouseframework(?)

artifactId: awesome-inhouse-framework(?)

Noarth
fonte
1
Onde você vê o groupId concatenado com o artifactId? Eu acho que as convenções que você declara são as corretas.
Abhinav Sarkar
2
Na verdade, sublinhados são permitidos em nomes de pacotes Java, consulte: docs.oracle.com/javase/tutorial/java/package/namingpkgs.html
Adriaan Koster

Respostas:

146

Sua convenção parece ser razoável. Se eu estivesse procurando sua estrutura no repositório Maven, procuraria awesome-inhouse-framework-x.y.jarno com.mycompany.awesomeinhouseframeworkdiretório de grupos. E eu o encontraria de acordo com sua convenção.

Duas regras simples funcionam para mim:

  • pacotes de domínio reverso para groupId (uma vez que são bastante exclusivos) com todas as restrições relacionadas aos nomes de pacotes Java
  • nome do projeto como artifactId (lembre-se de que deve ser compatível com o nome do jar, ou seja, não deve conter caracteres que talvez sejam inválidos para um nome de arquivo ou apenas que sejam estranhos)
Henryk Konsek
fonte
Certo, se você e o abhin4v acham que é normal, então farei assim, obrigado!
Noart
Acho a mistura de não-hífen (awesomeinhouseframework) e hífen (awesome-inhouse-framework) um pouco estranha. Como o groupid não permite hífens, eu também ficaria com a grafia sem hífen para o artefato.
Michael Küller 23/08/19
3
Por favor, esclareça o que você quer dizer com "jar-name friendly"?
vikramvi
1
Esclarecido na resposta :).
Henryk Konsek
241

A estranheza é altamente subjetiva, apenas sugiro seguir a recomendação oficial:

Guia para convenções de nomenclatura em groupId, artifactId e version

  • groupIdidentificará seu projeto exclusivamente em todos os projetos, portanto, precisamos aplicar um esquema de nomenclatura. Ele deve seguir as regras de nome do pacote, o que significa que deve ser pelo menos o nome de domínio que você controla e você pode criar quantos subgrupos quiser. Veja Mais informações sobre nomes de pacotes .

    por exemplo. org.apache.maven,org.apache.commons

    Uma boa maneira de determinar a granularidade do groupId é usar a estrutura do projeto. Ou seja, se o projeto atual é um projeto de vários módulos, ele deve anexar um novo identificador ao groupId do pai.

    por exemplo. org.apache.maven, org.apache.maven.plugins, org.apache.maven.reporting

  • artifactIdé o nome do jar sem versão. Se você o criou, poderá escolher o nome que quiser com letras minúsculas e sem símbolos estranhos. Se for um jar de terceiros, é necessário que o nome do jar seja distribuído.

    por exemplo. maven,commons-math

  • versionse você distribuí-lo, poderá escolher qualquer versão típica com números e pontos (1.0, 1.1, 1.0.1, ...). Não use datas, pois elas geralmente estão associadas às construções do INSTANTÂNEO (noturno). Se for um artefato de terceiros, você precisará usar o número da versão, seja qual for, e o mais estranho que possa parecer.

    por exemplo. 2.0, 2.0.1,1.3.1

Pascal Thivent
fonte
4
Conheço essas convenções, mas elas realmente não dizem como o nome do artefato deve ser inventado (não há convenções de nomenclatura JAR) e o que fazer se fosse o mesmo que o groupId - não vi um único POM onde é esse o caso
Noarth
@Noarth 1. O nome do artefato fica a seu critério (mas o uso de hífens no nome é uma prática comum). 2. Você está procurando por uma "regra" absoluta que não existe (e se sua incrível estrutura interna for composta por vários módulos?). Veja, por exemplo, os artefatos Spring, Maven, Hibernate, etc.
Pascal Thivent
Não, não, não tenho módulos, apenas projetos simples. Na verdade, não temos um projeto chamado "quadro inhouse incrível" :)
Noarth
11
Que tal package? Qual a diferença para groupId?
KonstantinK
1
É permitido ao artifactId ter números?
8136 theonlygusti
100

Considere o seguinte como para criar o primeiro aplicativo básico do Maven :

groupId

  • com.companyname.project

artifactId

  • projeto

version

  • 0.0.1
Manwal
fonte
Como trabalho contratado, devo usar com.my.company.project como groupIdou com.client.company.project?
Giacomo Alzetta
@GiacomoAlzetta, você pode usar qualquer um dos formatos que melhor lhe convier. Alguns exemplos 'com.companyName.hirePortal' ou 'org.compnayName.hirePortal'.
Manwal
3
groupId deve ser com.companyname, não com.companyname.project #
Kamil Nekanowicz
1

No entanto, eu discordo da definição oficial do Guia de convenções de nomenclatura em groupId, artifactId e versão que propõe que o groupId deve começar com um nome de domínio invertido que você controla.

comsignifica que esse projeto pertence a uma empresa e orgsignifica que esse projeto pertence a uma organização social. Tudo bem, mas para domínios estranhos como xxx.tv, xxx.uk, xxx.cn, não faz sentido nomear o groupId iniciado com "tv.", "Cn.", O groupId deve fornecer as informações básicas do projeto e não do domínio.

Tommy.Tang
fonte
2
Esta convenção está impedindo que os desenvolvedores usem o maven porque você deve possuir um domínio antes de implantar seus artefatos no repositório central do maven. É ridículo. Possuir um domínio pode custar bastante ano a ano.
Tommy.Tang
1
Não há nenhum requisito para realmente possuir um registro para esse nome de domínio. O único requisito é que o ID do seu grupo, que será o nome do pacote Java, não entre em conflito com outro nome quando implementado. Essa convenção certamente não está impedindo que os desenvolvedores usem o Maven.
Basil Bourque
Uma boa prática é derivar nomes de pacotes da URL do repositório. Se você estiver usando o GitHub, sua conta será chamada myusere seu repositório será chamado myrepo. Basta usar o nome do pacote com.github.myuser.myrepo. Isso é gratuito e ainda único.
fxnn 14/05
-14

Considere isso para obter um arquivo jar totalmente exclusivo:

  • ID do grupo - com.companyname.project
  • ArtifactId - com-companyname-project
  • Pacote - com.companyname.project
codificador
fonte