Jaki archetyp wybrać dla prostego projektu Java

89

archetype mvn: generowanie zapewnia o wiele za dużo opcji, a ja szukam prostego narzędzia java z przypadkami testowymi junit. Chciałbym wiedzieć, jakiego archetypu powinienem tu użyć?

Jason
źródło
Polecam przeczytanie przewodnika Maven Pierwsze kroki . Jest krótki i obejmuje dużo ziemi.
Sahil Muthoo

Odpowiedzi:

16

Kiedy robisz a mvn archetype:generate, domyślny wybór pojawia się w otaczających nawiasach klamrowych (), np. (1274)Jeśli przewiniesz w górę, aby zobaczyć, co to jest # 1274, jest to zwykle domyślny archetyp Javy do wypróbowania lub rozpoczęcia, jeśli robisz proste projekty Java. bezpieczny do wyboru.

Oh Chin Boon
źródło
domyślnie jest to 333, a nie 3
TimP,
4
jest teraz380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
slf Kwietnia
1
Mówi np. Nie ie, więc sugeruje, że domyślny wybór to 3.
Oh Chin Boon,
2
Jest teraz 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
aliopi
Jest teraz 874 :)
miku
74

Używam dwóch archetypów. To zależy od tego, jaką aplikację utworzysz.

Jeśli potrzebujesz aplikacji internetowej, użyj maven-archetype-webapp , a jeśli potrzebujesz prostej aplikacji, użyj maven-archetype-quickstart . Są przydatne, ponieważ bez problemu je rozbudujesz.

Oleksandr
źródło
1
Zauważ, że jest to domyślnie we wtyczce Eclipse (przynajmniej jest dzisiaj).
Ben
tutaj mam zamiar stworzyć maven-archetype-webapp i pobrać katalog maven, ale pojawia się błąd.
Mowgli
co powinienem zrobić?
Mowgli
19

Używam polecenia jak poniżej:

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

Będę uzyskać krótką listę z achetypes tylko z org.apache.maven.archetypesGroupID. Te dobre na start są maven-archetype-quickstarti maven-archetype-webapptak jak mówili moi poprzednicy.

marioosh
źródło
8

Oto, czego potrzebujesz

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

Odniesienie: Build Run Java Maven Project Command Line

Sorter
źródło
7

Myślę, że powinieneś użyć maven-archetype-simple

EDYTOWAĆ

Według dokumentacji maven :

  • maven-archetype-quickstart Archetyp zawierający przykładowy projekt Mavena.
  • maven-archetype-simple Archetyp zawierający prosty projekt Mavena.
AlexR
źródło
4
Nie widzę maven-archetype-simplew moim wyborze Eclipse, ale widzę maven-archetype-quickstart. Czy oni są tacy sami?
huahsin68
Proszę spojrzeć na moją późniejszą edycję, która odnosi się do dokumentacji Mavena. Odnośnie wtyczki eclipse: Osobiście wolę edytować pom.xmlręcznie i uruchamiać wiersz poleceń z wiersza poleceń.
AlexR
6

Zacząłbym od bardzo prostego pliku pom.xml, który zawiera tylko to, czego potrzebujesz. Coś jak

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

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

Peter Lawrey
źródło
12
Chociaż ta rada może mieć wartość, nie odpowiada na pytanie. Cały sens archetypów, jak rozumiem, polega na tym, aby uchronić programistę przed tego rodzaju szablonami i ułatwić stosowanie najlepszych praktyk.
Michael Scheper
3

Możesz użyć dowolnego z podstawowych z The Practical Developer:

Często używane biblioteki testowe 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

Często używane biblioteki testowe 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

Obejmują one JUnit 4, Mockito i AssertJ oraz domyślny plik manifestu na wypadek, gdybyś chciał, aby plik jar był wykonywalny. Więcej informacji: https://thepracticaldeveloper.com/archetypes/

Zastrzeżenie: jestem autorem tego bloga.

Moisés
źródło
Dostaję groupId, ale po co archetypeGroupId?
lupchiazoem
1
Służy do lokalizowania archetypu w repozytorium Mavena wraz z rozszerzeniem archetypeArtifactId.
Moisés
0

maven-archetype-quickstart Archetyp zawierający przykładowy projekt Mavena. maven-archetype-simple Archetyp zawierający prosty projekt Mavena.

jeśli get błędy naprawiono, dodając katalog archetypów mavena do Eclipse. Kroki podano poniżej:

Otwórz okno> Preferencje> Maven> Archetypy

Kliknij Add Remote Catalogi dodaj:

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

Opis: katalog maven

UWAGA: PODCZAS TWORZENIA PIERWSZEGO PIERWSZEGO PROJEKTU WYMAGANE JEST POŁĄCZENIE Z INTERNETEM.

Biswajit Sahu
źródło
pobranie powyższego katalogu i ręczne ustawienie, ale nie działa dla mnie.
Mowgli
0

domyślny numer archetypu to teraz 1092 1092: remote -> org.apache.maven.archetypes: maven-archetype-quickstart (archetyp zawierający przykładowy projekt Mavena).

Prateek Kushwaha
źródło
0

Możesz rozważyć archetyp Java : ma rozsądne wartości domyślne do szybkiego uruchamiania projektu Java zgodnie z najlepszymi praktykami, w tym testami JUnit. Pomyślałem, że to nowoczesny następca maven-archetype-quickstart.

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

Zastrzeżenie: jestem autorem.

Aby uzyskać więcej informacji na temat alternatyw, oto część pliku README tego projektu (zawiera więcej linków niż skopiowanych tutaj).

Oficjalny archetyp szybkiego startu

Oficjalnym archetypem (wspomnianym w Apache's Maven Getting Started Guide i Apache Maven Cookbook) dla prostych projektów Java jest maven-archetype-quickstart lub org.apache.maven.archetypes: maven-archetype-quickstart w całości.

Powinien, IMHO, zostać uznany za przestarzały, ponieważ ma kilka słabych punktów.

  • Istotnym problemem jest to, że tworzy projekty zależne od JUnit 4. Obecna wersja, JUnit 5, znacznie się różni, zapewniając między innymi ulepszone API.
  • Drobne słabości: jego domyślna wersja to 1.0-SNAPSHOT, która powinna być 1.0.0-SNAPSHOT, aby postępować zgodnie z zalecanym i zwykłym schematem.
  • Kolejna drobna słabość: tworzy projekty skonfigurowane dla maszyny JVM 1.7. Może to być odpowiednie, jeśli potrzebujesz szczególnie obsługi starych instalacji, ale wybranie stosunkowo niedawnej maszyny JVM jest rozsądniejszą regułą domyślną dla nowych projektów. Na przykład Java 8 wprowadziła wyrażenia lambda, których prawdopodobnie nie chcesz przegapić.

Mój archetyp zapewnia również domyślne logowanie, co moim zdaniem jest przydatne, skaluje się lepiej niż sysout i nie boli, oraz guawa, która moim zdaniem pożytecznie wzbogaca Javę.

Inne archetypy szybkiego startu w Maven Central

Aby w miarę możliwości połączyć wysiłki i uniknąć niepotrzebnego powielania, aktywnie szukałem innych archetypów, które miałyby ten sam cel co mój: zapewnić prosty archetyp z rozsądnymi domyślnymi ustawieniami, aby łatwo rozpocząć nowoczesny projekt Java. (Zrobiono to głównie około czerwca 2020 r.)

Ogólne wyszukiwanie w Internecie doprowadziło mnie do The Practical Developer. Kiedy się skontaktowałem, napisał do mnie (przez e-mail), że nie pracuje regularnie nad swoim archetypem i dlatego wolał odmówić współpracy przy takim projekcie.

Ponieważ wyszukiwania w sieci nie przyniosły innych przydatnych wyników, a nie znalazłem specjalistycznej wyszukiwarki odpowiadającej moim potrzebom, zaimplementowałem prostą przeglądarkę archetypów. Zawiera listę wszystkich archetypów dostępnych w Maven Central. Jest ich zbyt wiele, aby przejrzeć je ręcznie, dlatego wybrałem te, których groupId i artifactId istniały od co najmniej trzech lat i zostały zaktualizowane w ciągu ostatniego roku, w nadziei znalezienia projektów, które będą utrzymywane w dłuższej perspektywie, co, jak przypuszczam, wskazuje raczej projekt dobrej jakości. (Oczywiście ten filtr mógł przeoczyć archetypy dobrej jakości, które idealnie pasują do określonego celu; nie mam sposobu, aby wiedzieć. Przykładowo, ten sam archetyp nie przechodzi przez ten filtr, ponieważ z czasem zmieniłem jego artefaktId).

Następnie ręcznie przefiltrowałem wynikową listę na podstawie opisów archetypów znalezionych w ich POM i przyjrzałem się (zazwyczaj na oficjalnej stronie internetowej) kilku obiecującym archetypom spośród nich. Tylko com.github.ngeor:archetype-quickstart-jdk8okazuje się być odpowiednim kandydatem. Ale jego autor napisał do mnie, że „obecnie nie używa / nie utrzymuje zbyt często archetypu”.

Olivier Cailloux
źródło