Welcher Archetyp für ein einfaches Java-Projekt ausgewählt werden soll

86

mvn archetype: generate bietet viel zu viele Optionen und ich möchte ein einfaches Java-Dienstprogramm mit Junit-Testfällen erstellen. Ich möchte wissen, welchen Archetyp ich hier verwenden soll.

Jason
quelle
Ich empfehle Ihnen, das Maven Getting Started Guide zu lesen . Es ist kurz und deckt viel Boden ab.
Sahil Muthoo

Antworten:

16

Wenn Sie ein tun mvn archetype:generate, erscheint eine Standardauswahl geschweiften Klammern in umschließenden (), zum Beispiel (1274), wenn Sie nach oben , um zu sehen , was 1274 # ist, ist es in der Regel der Standard - Java Urbild ist mit auszuprobieren oder beginnen, wenn einfachen Projekten Java zu tun, so ist sicher zu wählen.

Oh Chin Boon
quelle
Dieser Standardwert ist jetzt 333, nicht 3
TimP
4
es ist jetzt380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
slf
1
Es heißt zB nicht, also bedeutet dies, dass die Standardauswahl 3 ist.
Oh Chin Boon
2
Es ist jetzt 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
Aliopi
Es ist jetzt 874 :)
Miku
74

Ich benutze zwei Archetypen. Dies hängt davon ab, welche Art von Anwendung Sie erstellen.

Wenn Sie eine Webanwendung möchten, verwenden Sie maven-archetype-webapp , oder wenn Sie eine einfache Anwendung möchten, verwenden Sie maven-archetype-quickstart . Sie sind nützlich, da Sie sie problemlos erweitern können.

Oleksandr
quelle
1
Beachten Sie, dass dies standardmäßig im Eclipse-Plugin enthalten ist (zumindest heute).
Ben
hier werde ich maven-archetype-webapp erstellen und den maven katalog herunterladen, aber eine fehlermeldung erhalten.
Mowgli
was soll ich machen?
Mowgli
19

Ich benutze den folgenden Befehl:

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

Ich werde eine kurze Liste der Achetypen nur von org.apache.maven.archetypesgroupId erhalten. Die guten für den Start sind maven-archetype-quickstartund maven-archetype-webappwie meine Vorgänger sagten.

Marioosh
quelle
7

Ich denke du solltest verwenden maven-archetype-simple

BEARBEITEN

Laut der Maven- Dokumentation :

  • maven-archetype-quickstart Ein Archetyp, der ein Beispiel für ein Maven-Projekt enthält.
  • maven-archetype-simple Ein Archetyp, der ein einfaches Maven-Projekt enthält.
AlexR
quelle
4
Ich sehe nicht maven-archetype-simplein meiner Eclipse-Auswahl, aber ich sehe maven-archetype-quickstart. Sind sie gleich?
Huahsin68
Bitte werfen Sie einen Blick auf meine spätere Bearbeitung, die sich auf die Maven-Dokumentation bezieht. In Bezug auf das Eclipse-Plugin: Ich persönlich bevorzuge es, pom.xmlmanuell zu bearbeiten und die Befehlszeile über die Eingabeaufforderung auszuführen.
AlexR
6

Ich würde mit einer sehr einfachen pom.xml-Datei beginnen, die nur das enthält, was Sie benötigen. Etwas wie

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

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

Peter Lawrey
quelle
12
Dieser Rat mag zwar sinnvoll sein, beantwortet aber die Frage nicht. Der springende Punkt bei Archetypen ist, wie ich es verstehe, den Entwickler vor dieser Art von Boilerplate zu bewahren und es einfach zu machen, Best Practices zu befolgen.
Michael Scheper
3

Sie können alle grundlegenden von The Practical Developer verwenden:

Java 8 + häufig verwendete Testbibliotheken:

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

Java 9 + häufig verwendete Testbibliotheken

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

Dazu gehören JUnit 4, Mockito und AssertJ sowie eine Standardmanifestdatei für den Fall, dass Ihre JAR-Datei ausführbar sein soll. Weitere Informationen: https://thepracticaldeveloper.com/archetypes/

Haftungsausschluss: Ich bin der Autor dieses Blogs.

Moisés
quelle
Ich verstehe groupId, aber wozu archetypeGroupId?
Lupchiazoem
1
Es wird verwendet, um den Archetyp im Maven-Repository zusammen mit dem zu lokalisieren archetypeArtifactId.
Moisés
0

maven-archetype-quickstart Ein Archetyp, der ein Beispiel für ein Maven-Projekt enthält. maven-archetype-simple Ein Archetyp, der ein einfaches Maven-Projekt enthält.

Wenn Fehler behoben werden, wird dies durch Hinzufügen des Maven-Archetyp-Katalogs zu Eclipse behoben. Die folgenden Schritte sind aufgeführt:

Öffnen Sie Fenster> Einstellungen> Maven> Archetypen

Klicken Sie auf Add Remote Catalogund fügen Sie Folgendes hinzu:

Katalogdatei: http://repo1.maven.org/maven2/archetype-catalog.xml

Beschreibung: Maven-Katalog

HINWEIS: WÄHREND DER ERSTELLUNG IHRES ERSTEN MAVEN-PROJEKTS IST EINE INTERNET-VERBINDUNG ERFORDERLICH.

Biswajit Sahu
quelle
Den obigen Katalog herunterladen und manuell einstellen, hat aber bei mir nicht funktioniert.
Mowgli
0

Die Standard-Archetypnummer lautet jetzt 1092 1092: remote -> org.apache.maven.archetypes: maven-archetype-quickstart (Ein Archetyp, der ein Beispiel für ein Maven-Projekt enthält.)

Prateek Kushwaha
quelle
0

Möglicherweise möchten Sie den Java-Archetyp in Betracht ziehen : Er verfügt über angemessene Standardeinstellungen, um ein Java-Projekt schnell nach bewährten Methoden, einschließlich JUnit-Tests, zu starten. Ich habe es als modernen Nachfolger von konzipiert maven-archetype-quickstart.

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

Haftungsausschluss: Ich bin der Autor.

Weitere Informationen zu Alternativen finden Sie in der README-Datei dieses Projekts (sie enthält mehr Links als hier kopiert).

Der offizielle Schnellstart-Archetyp

Der offizielle Archetyp (erwähnt in Apaches Maven Getting Started Guide und im Apache Maven Cookbook) für einfache Java-Projekte ist maven-archetype-quickstart oder org.apache.maven.archetypes: maven-archetype-quickstart in vollem Umfang.

Es sollte meiner Meinung nach als veraltet angesehen werden, da es mehrere Schwächen aufweist.

  • Ein wichtiges Problem besteht darin, dass Projekte erstellt werden, die von JUnit 4 abhängen. Die aktuelle Version, JUnit 5, unterscheidet sich erheblich und bietet unter anderem eine verbesserte API.
  • Kleinere Schwachstellen: Die Standardversion ist 1.0-SNAPSHOT. Dies sollte 1.0.0-SNAPSHOT sein, um dem empfohlenen und üblichen Schema zu folgen.
  • Eine weitere kleine Schwäche: Es werden Projekte erstellt, die für eine 1.7 JVM konfiguriert sind. Dies kann angebracht sein, wenn Sie insbesondere alte Installationen unterstützen müssen. Die Entscheidung für eine relativ neue JVM ist jedoch eine vernünftigere Standardregel für neue Projekte. In Java 8 wurden beispielsweise Lambda-Ausdrücke eingeführt, die Sie wahrscheinlich nicht verpassen möchten.

Mein Archetyp bietet auch standardmäßig Protokollierung, die meiner Meinung nach nützlich ist, besser skaliert als Sysout und nicht schadet, und Guava, die meiner Meinung nach Java sinnvoll bereichert.

Andere Schnellstart-Archetypen in Maven Central

Um mich nach Möglichkeit zusammenzuschließen und unnötige Überschneidungen zu vermeiden, habe ich aktiv nach anderen Archetypen gesucht, die das gleiche Ziel wie ich haben: einen einfachen Archetyp mit angemessenen Standardeinstellungen bereitzustellen, um ein modernes Java-Projekt einfach zu starten. (Dies wurde meistens um Juni 2020 gemacht.)

Eine allgemeine Suche im Internet führte mich zu The Practical Developer. Als er kontaktiert wurde, schrieb er mir (per E-Mail), dass er nicht regelmäßig an seinem Archetyp arbeite und es daher vorziehe, die Zusammenarbeit an einem solchen Projekt abzulehnen.

Da die Suche im Internet keine anderen nützlichen Ergebnisse ergab und ich kein spezielles Suchwerkzeug fand, das für meine Anforderungen geeignet war, implementierte ich einen einfachen Archetyp-Browser. Es listet alle in Maven Central verfügbaren Archetypen auf. Es gibt viel zu viele, um sie manuell zu überprüfen. Daher habe ich diejenigen ausgewählt, deren Gruppen- und Artefakt-ID seit mindestens drei Jahren existiert und die im letzten Jahr aktualisiert wurden, in der Hoffnung, Projekte zu finden, die auf lange Sicht beibehalten werden, was vermutlich darauf hindeutet eher ein Projekt von guter Qualität. (Natürlich hat dieser Filter möglicherweise Archetypen von guter Qualität übersehen, die perfekt zum angegebenen Ziel passen. Ich kann es nicht wissen. In diesem Fall besteht dieser Archetyp diesen Filter nicht, da ich seine Artefakt-ID im Laufe der Zeit geändert habe.)

Ich habe dann die resultierende Liste manuell auf der Grundlage der Archetypbeschreibungen gefiltert, die in ihrem POM gefunden wurden, und einen weiteren Blick (normalerweise auf der offiziellen Website) auf einige vielversprechende Archetypen unter ihnen geworfen. Nur com.github.ngeor:archetype-quickstart-jdk8als geeigneter Kandidat herausgestellt. Aber sein Autor schrieb mir, dass er "den Archetyp heutzutage nicht wirklich benutzt / pflegt".

Olivier Cailloux
quelle