Qual arquétipo escolher para um projeto Java simples

90

mvn archetype: generate fornece muitas opções e estou procurando criar um utilitário java simples com casos de teste junit. Gostaria de saber qual arquétipo devo usar aqui?

Jason
fonte
Recomendo que você leia o Guia de primeiros passos do Maven . É curto e cobre muito terreno.
Sahil Muthoo

Respostas:

16

Quando você faz um mvn archetype:generate, uma seleção padrão aparece entre colchetes (), por exemplo (1274), se você rolar para cima para ver o que é # 1274, geralmente é o arquétipo Java padrão para experimentar ou começar, se estiver fazendo projetos Java simples, então é seguro para selecionar.

Oh Chin Boon
fonte
esse padrão agora é 333, não 3
TimP
4
é agora380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
slf
1
Diz eg, não ie, portanto, implica que a seleção padrão é 3.
Oh Chin Boon
2
Agora é 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
aliopi,
Agora são 874 :)
miku
74

Eu uso dois arquétipos. Depende do tipo de aplicativo que você criará.

Se você quiser um aplicativo da web, use maven-archetype-webapp ou se quiser um aplicativo simples, use maven-archetype-quickstart . Eles são úteis porque você poderá expandi-los sem problemas.

Oleksandr
fonte
1
Observe que isso está no plugin do Eclipse por padrão (pelo menos é hoje).
Ben
aqui, vou criar maven-archetype-webapp e baixar o catálogo do maven, mas obtenho um erro.
Mowgli de
O que devo fazer?
Mowgli
19

Estou usando um comando como abaixo:

mvn archetype:generate -Dfilter=org.apache.maven.archetypes:

Vou obter uma pequena lista de achetypes apenas do org.apache.maven.archetypesgroupId. Os bons para começar é maven-archetype-quickstarte maven-archetype-webappcomo meus antecessores disseram.

marioosh
fonte
8

Aqui está o que você precisa

 mvn archetype:generate -DgroupId=com.example -DartifactId=foobar -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Referência: Linha de comando do projeto Java Maven Build Run

Classificador
fonte
7

Eu acho que você deveria usar maven-archetype-simple

EDITAR

De acordo com a documentação do maven :

  • maven-archetype-quickstart Um arquétipo que contém um projeto Maven de amostra.
  • maven-archetype-simple Um arquétipo que contém um projeto Maven simples.
AlexR
fonte
4
Não vejo maven-archetype-simplena minha seleção de Eclipse, mas vejo maven-archetype-quickstart. Eles são os mesmos?
huahsin68 de
Por favor, dê uma olhada na minha edição posterior que se refere à documentação do maven. Em relação ao plugin do eclipse: eu pessoalmente prefiro editar pom.xmlmanualmente e executar a linha de comando no prompt de comando.
AlexR
6

Eu começaria com um arquivo pom.xml muito simples que contém apenas o que você precisa. Algo como

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-module</artifactId>
  <version>1</version>
</project>

de http://maven.apache.org/guides/introduction/introduction-to-the-pom.html

Peter Lawrey
fonte
12
Embora esse conselho possa ter mérito, ele não responde à pergunta. O objetivo dos arquétipos, pelo que entendi, é salvar o desenvolvedor desse tipo de clichê e tornar mais fácil seguir as práticas recomendadas.
Michael Scheper
3

Você pode usar qualquer um dos básicos do The Practical Developer:

Bibliotecas de teste Java 8 + comumente usadas:

mvn archetype:generate -DgroupId=[your-project-groupId] -DartifactId=[your-project-name] -DarchetypeGroupId=com.thepracticaldeveloper -DarchetypeArtifactId=archetype-java-basic-tpd -DarchetypeVersion=1.0.0

Bibliotecas de teste Java 9 + comumente usadas

mvn archetype:generate -DgroupId=[your-project-groupId] -DartifactId=[your-project-name] -DarchetypeGroupId=com.thepracticaldeveloper -DarchetypeArtifactId=archetype-java-basic-tpd -DarchetypeVersion=1.0.0 -Djava-version=9

Eles incluem JUnit 4, Mockito e AssertJ, e um arquivo de manifesto padrão, caso você queira que seu arquivo jar seja executável. Mais informações: https://thepracticaldeveloper.com/archetypes/

Isenção de responsabilidade: eu sou o autor desse blog.

Moisés
fonte
Eu entendo groupId, mas para quê archetypeGroupId?
lupchiazoem
1
Ele é usado para localizar o arquétipo no repositório Maven, junto com o archetypeArtifactId.
Moisés
0

maven-archetype-quickstart Um arquétipo que contém um projeto Maven de amostra. maven-archetype-simple Um arquétipo que contém um projeto Maven simples.

se os erros forem corrigidos adicionando o catálogo de arquétipos do maven ao eclipse. As etapas são fornecidas abaixo:

Abra a janela> Preferências> Maven> Arquétipos

Clique Add Remote Cataloge adicione o seguinte:

Arquivo de catálogo: http://repo1.maven.org/maven2/archetype-catalog.xml

Descrição: catálogo maven

NOTA: A CONEXÃO COM A INTERNET É NECESSÁRIA DURANTE A CRIAÇÃO DE SEU PRIMEIRO PROJETO MAVEN.

Biswajit Sahu
fonte
baixar o catálogo acima e definir manualmente, mas não funcionou para mim.
Mowgli de
0

o número do arquétipo padrão agora é 1092 1092: remote -> org.apache.maven.archetypes: maven-archetype-quickstart (um arquétipo que contém um projeto Maven de amostra).

Prateek Kushwaha
fonte
0

Você pode querer considerar o Java Archetype : ele tem padrões razoáveis ​​para iniciar rapidamente um projeto Java seguindo as melhores práticas, incluindo testes JUnit. Eu o concebi como um sucessor moderno de maven-archetype-quickstart.

Exemplo: mvn archetype:generate -DarchetypeGroupId=io.github.oliviercailloux -DarchetypeArtifactId=java-archetype -DgroupId=mygroupid -DartifactId=myartifactid -DinteractiveMode=false.

Aviso: eu sou o autor.

Para obter mais informações sobre alternativas, aqui está uma parte do README desse projeto (ele fornece mais links do que copiados aqui).

O arquétipo oficial de início rápido

O arquétipo oficial (mencionado pelo Guia de introdução do Maven da Apache e pelo Livro de receitas do Apache Maven) para projetos Java simples é maven-archetype-quickstart ou org.apache.maven.archetypes: maven-archetype-quickstart completo.

Deve, IMHO, ser considerado obsoleto, uma vez que apresenta vários pontos fracos.

  • Um problema importante é que ele cria projetos que dependem do JUnit 4. A versão atual, JUnit 5, difere significativamente, fornecendo, entre outros, uma API aprimorada.
  • Pequenos pontos fracos: sua versão padrão é 1.0-SNAPSHOT, que deve ser 1.0.0-SNAPSHOT para seguir o esquema recomendado e usual.
  • Outra pequena fraqueza: ele cria projetos configurados para uma JVM 1.7. Isso pode ser apropriado se você precisar oferecer suporte a instalações antigas, mas optar por uma JVM razoavelmente recente é uma regra padrão mais razoável para novos projetos. Por exemplo, o Java 8 introduziu expressões lambda, que você provavelmente não quer perder.

Meu arquétipo também fornece registro por padrão, o que eu acho útil, tem melhor escalabilidade do que o sysout e não prejudica, e Guava, que eu acho que enriquece o Java de maneira útil.

Outros arquétipos de início rápido no Maven Central

Para unir esforços, se possível, e evitar duplicações desnecessárias, busquei ativamente outros arquétipos que tivessem o mesmo objetivo que o meu: fornecer um arquétipo simples com padrões razoáveis ​​para iniciar facilmente um projeto Java moderno. (Isso foi feito principalmente por volta de junho de 2020.)

Uma pesquisa geral na internet me levou ao The Practical Developer. Quando contatado, ele escreveu para mim (por e-mail) que não trabalha em seu arquétipo regularmente e, portanto, preferiu recusar a colaboração em tal projeto.

Como as pesquisas na rede não revelaram outros resultados úteis e como não encontrei nenhuma ferramenta de pesquisa especializada adequada às minhas necessidades, implementei um navegador de arquétipo simples. Ele lista todos os arquétipos disponíveis no Maven Central. São muitos para revisar manualmente, portanto, selecionei aqueles cujo groupId e artifactId existiam há pelo menos três anos e foram atualizados durante o último ano, na esperança de encontrar projetos que sejam mantidos a longo prazo, o que suponho indica mais provavelmente um projeto de boa qualidade. (É claro que este filtro pode ter perdido arquétipos de boa qualidade que correspondem perfeitamente à meta declarada; não tenho como saber. Como um caso em questão, esse mesmo arquétipo não passa por esse filtro, pois mudei seu artifactId ao longo do tempo.)

Em seguida, filtrei manualmente a lista resultante com base nas descrições dos arquétipos encontrados em seu POM e dei uma olhada adicional (no site oficial, normalmente) por alguns arquétipos promissores entre eles. Apenas com.github.ngeor:archetype-quickstart-jdk8revelou ser um candidato adequado. Mas seu autor escreveu para mim que ele “não está usando / mantendo muito o arquétipo atualmente”.

Olivier Cailloux
fonte