Que arquetipo elegir para un proyecto java simple

89

mvn archetype: generate proporciona demasiadas opciones y estoy buscando crear una utilidad java simple con casos de prueba junit. Me gustaría saber qué arquetipo debería usar aquí.

Jason
fuente
Le recomiendo que lea la Guía de inicio de Maven . Es corto y cubre mucho terreno.
Sahil Muthoo

Respuestas:

16

Cuando hace a mvn archetype:generate, aparece una selección predeterminada entre llaves (), por ejemplo (1274), si se desplaza hacia arriba para ver qué es # 1274, generalmente es el arquetipo predeterminado de Java para probar o comenzar, si está haciendo proyectos simples de Java, también lo es seguro para seleccionar.

Oh Chin Boon
fuente
que el valor predeterminado es ahora 333, no 3
TimP
4
es ahora380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
slf
1
Dice, por ejemplo, no es decir, por lo que implica que la selección predeterminada es 3.
Oh Chin Boon
2
Ahora es 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
aliopi
Ahora es 874 :)
Miku
74

Utilizo dos arquetipos. Depende del tipo de aplicación que cree.

Si desea una aplicación web, use maven-archetype-webapp , o si desea una aplicación simple, use maven-archetype-quickstart . Son útiles porque podrás ampliarlos sin problemas.

Oleksandr
fuente
1
Tenga en cuenta que esto está en el complemento Eclipse de forma predeterminada (al menos lo está hoy).
Ben
aquí voy a crear maven-archetype-webapp y descargar el catálogo de maven pero obtengo un error.
Mowgli
¿Qué tengo que hacer?
Mowgli
19

Estoy usando un comando como el siguiente:

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

Obtendré una lista corta de achetypes solo de org.apache.maven.archetypesgroupId. Los buenos para empezar es maven-archetype-quickstarty maven-archetype-webappcomo decían mis predecesores.

marioosh
fuente
7

Creo que deberías usar maven-archetype-simple

EDITAR

Según la documentación de maven :

  • maven-archetype-quickstart Un arquetipo que contiene un proyecto de muestra de Maven.
  • maven-archetype-simple Un arquetipo que contiene un proyecto Maven simple.
AlexR
fuente
4
No veo maven-archetype-simpleen mi selección de Eclipse, pero veo maven-archetype-quickstart. ¿Son lo mismo?
huahsin68
Por favor, eche un vistazo a mi edición posterior que se refiere a la documentación de Maven. Con respecto al complemento eclipse: personalmente prefiero editar pom.xmlmanualmente y ejecutar la línea de comando desde el símbolo del sistema.
AlexR
6

Comenzaría con un archivo pom.xml muy simple que tiene solo lo que necesita. 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
fuente
12
Si bien este consejo puede tener mérito, no responde a la pregunta. El objetivo de los arquetipos, tal como yo lo entiendo, es salvar al desarrollador de este tipo de repetición y facilitar el seguimiento de las mejores prácticas.
Michael Scheper
3

Puede utilizar cualquiera de los básicos de The Practical Developer:

Bibliotecas de prueba de uso común de Java 8 +:

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 prueba de uso común de Java 9 +

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

Incluyen JUnit 4, Mockito y AssertJ, y un archivo de manifiesto predeterminado en caso de que desee que su archivo jar sea ejecutable. Más información: https://thepracticaldeveloper.com/archetypes/

Descargo de responsabilidad: soy el autor de ese blog.

Moisés
fuente
Lo entiendo groupId, pero ¿ archetypeGroupIdpara qué ?
lupchiazoem
1
Se utiliza para ubicar el arquetipo en el repositorio de Maven, junto con el archetypeArtifactId.
Moisés
0

maven-archetype-quickstart Un arquetipo que contiene un proyecto de ejemplo de Maven. maven-archetype-simple Un arquetipo que contiene un proyecto Maven simple.

Si se solucionan los errores, se agrega el catálogo de arquetipos de maven a eclipse. Los pasos se proporcionan a continuación:

Ventana abierta> Preferencias> Maven> Arquetipos

Haga clic Add Remote Catalogy agregue lo siguiente:

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

Descripción: catálogo maven

NOTA: SE REQUIERE CONEXIÓN A INTERNET DURANTE LA CREACIÓN DE SU PRIMER PROYECTO MAVEN.

Biswajit Sahu
fuente
descargar el catálogo anterior y configurarlo manualmente, pero no funcionó para mí.
Mowgli
0

el número de arquetipo predeterminado ahora es 1092 1092: remoto -> org.apache.maven.archetypes: maven-archetype-quickstart (Un arquetipo que contiene un proyecto Maven de muestra).

Prateek Kushwaha
fuente
0

Es posible que desee considerar Java Archetype : tiene valores predeterminados razonables para iniciar rápidamente un proyecto Java siguiendo las mejores prácticas, incluidas las pruebas JUnit. Lo concebí como un sucesor moderno de maven-archetype-quickstart.

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

Descargo de responsabilidad: soy el autor.

Para obtener más información sobre las alternativas, aquí hay una parte del archivo README de ese proyecto (proporciona más enlaces de los que se copian aquí).

El arquetipo oficial de inicio rápido

El arquetipo oficial (mencionado en Apache's Maven Getting Started Guide y en Apache Maven Cookbook) para proyectos simples de Java es maven-archetype-quickstart u org.apache.maven.archetypes: maven-archetype-quickstart en su totalidad.

Debería, en mi humilde opinión, considerarse obsoleto, ya que sufre varias debilidades.

  • Un problema importante es que crea proyectos que dependen de JUnit 4. La versión actual, JUnit 5, difiere significativamente, proporcionando entre otras una API mejorada.
  • Debilidades menores: su versión por defecto es 1.0-SNAPSHOT, que debe ser 1.0.0-SNAPSHOT para seguir el esquema recomendado y habitual.
  • Otra debilidad menor: crea proyectos configurados para una JVM 1.7. Esto puede ser apropiado si particularmente necesita admitir instalaciones antiguas, pero optar por una JVM razonablemente reciente es una regla predeterminada más razonable para proyectos nuevos. Por ejemplo, Java 8 introdujo expresiones lambda, que probablemente no querrá perderse.

Mi arquetipo también proporciona registro de forma predeterminada, que creo que es útil, escala mejor que sysout y no duele, y Guava, que creo que enriquece útilmente a Java.

Otros arquetipos de inicio rápido en Maven Central

Para unir esfuerzos si es posible y evitar la duplicación inútil, busqué activamente otros arquetipos que tuvieran el mismo objetivo que el mío: proporcionar un arquetipo simple con valores predeterminados razonables para iniciar fácilmente un proyecto Java moderno. (Esto se hizo principalmente alrededor de junio de 2020).

Una búsqueda general en Internet me llevó a The Practical Developer. Cuando se puso en contacto conmigo, me escribió (por correo electrónico) que no trabaja en su arquetipo con regularidad y, por lo tanto, prefirió negarse a colaborar en dicho proyecto.

Como las búsquedas en la red no revelaron otros resultados útiles, y como no encontré ninguna herramienta de búsqueda especializada que se adaptara a mis necesidades, implementé un navegador arquetipo simple. Enumera todos los arquetipos disponibles en Maven Central. Hay demasiados para revisar manualmente, por lo tanto, seleccioné aquellos cuyo groupId y artifactId existían desde al menos tres años y se han actualizado durante el último año, con la esperanza de encontrar proyectos que se mantengan a largo plazo, lo que supongo indica más probablemente un proyecto de buena calidad. (Por supuesto, este filtro puede haber pasado por alto arquetipos de buena calidad que coinciden perfectamente con el objetivo establecido; no tengo forma de saberlo. Como ejemplo, este mismo arquetipo no pasa ese filtro ya que he cambiado su artifactId con el tiempo).

Luego filtré manualmente la lista resultante sobre la base de las descripciones de arquetipos que se encuentran en su POM, y eché un vistazo más a fondo (en el sitio web oficial, por lo general) para ver algunos arquetipos prometedores entre ellos. Solo se com.github.ngeor:archetype-quickstart-jdk8reveló que era un candidato adecuado. Pero su autor me escribió que "realmente no está usando / manteniendo mucho el arquetipo en estos días".

Olivier Cailloux
fuente