Какой архетип выбрать для простого java-проекта

89

mvn archetype: generate предоставляет слишком много опций, и я хочу создать простую java-утилиту с тестовыми примерами junit. Я хотел бы знать, какой архетип мне здесь следует использовать?

Джейсон
источник
Я рекомендую вам прочитать Руководство по началу работы с Maven . Он короткий и охватывает множество вопросов.
Sahil Muthoo

Ответы:

16

Когда вы выполняете a mvn archetype:generate, выбор по умолчанию появляется в фигурных скобках (), например (1274), если вы прокрутите вверх, чтобы увидеть, что такое # 1274, обычно это архетип Java по умолчанию, с которого нужно опробовать или начать, если вы выполняете простые проекты Java, поэтому безопасно выбрать.

О Чин Бун
источник
теперь по умолчанию 333, а не 3
TimP
4
это сейчас380: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
slf
1
Там написано, например, а не то есть, поэтому подразумевается, что по умолчанию выбрано 3.
Oh Chin Boon
2
Сейчас 644 org.apache.maven.archetypes:maven-archetype-quickstart:1.1
aliopi
Сейчас 874 :)
miku
74

Я использую два архетипа. Это зависит от того, какое приложение вы создадите.

Если вам нужно веб-приложение, используйте maven-archetype-webapp , а если вам нужно простое приложение, используйте maven-archetype-quickstart . Они полезны, потому что вы без проблем сможете их расширить.

Александр
источник
1
Обратите внимание, что это есть в плагине Eclipse по умолчанию (по крайней мере, сегодня).
Бен
здесь я собираюсь создать maven-archetype-webapp и загрузить каталог maven, но получаю сообщение об ошибке.
Маугли
что я должен делать?
Маугли
19

Я использую команду, как показано ниже:

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

Я получу краткий список типов только от org.apache.maven.archetypesgroupId. Хорошие для пуска , maven-archetype-quickstartи , maven-archetype-webappкак и мои предшественники сказал.

Мариуш
источник
7

Я думаю, тебе стоит использовать maven-archetype-simple

РЕДАКТИРОВАТЬ

Согласно документации maven :

  • maven-archetype-quickstart Архетип, содержащий образец проекта Maven.
  • maven-archetype-simple Архетип, содержащий простой проект Maven.
AlexR
источник
4
Я не вижу maven-archetype-simpleв моей подборке Eclipse, но вижу maven-archetype-quickstart. Они одинаковы?
huahsin68
Пожалуйста, взгляните на мои более поздние изменения, которые относятся к документации maven. Что касается плагина eclipse: я лично предпочитаю редактировать pom.xmlвручную и запускать командную строку из командной строки.
AlexR
6

Я бы начал с очень простого файла pom.xml, в котором есть только то, что вам нужно. Что-то типа

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

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

Питер Лоури
источник
12
Хотя этот совет и заслуживает внимания, он не отвечает на вопрос. Вся суть архетипов, насколько я понимаю, состоит в том, чтобы избавить разработчика от такого рода шаблонов и упростить следование лучшим практикам.
Майкл Шепер
3

Вы можете использовать любой из базовых от The Practical Developer:

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

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

Они включают JUnit 4, Mockito и AssertJ, а также файл манифеста по умолчанию на случай, если вы хотите, чтобы ваш файл jar был исполняемым. Подробнее: https://thepracticaldeveloper.com/archetypes/

Отказ от ответственности: я автор этого блога.

Мойзес
источник
Я получаю groupId, а зачем archetypeGroupId?
lupchiazoem
1
Он используется для поиска архетипа в репозитории Maven вместе с расширением archetypeArtifactId.
Moisés
0

maven-archetype-quickstart Архетип, который содержит образец проекта Maven. maven-archetype-simple Архетип, содержащий простой проект Maven.

если получить ошибки, исправьте это, добавив каталог архетипов maven в eclipse. Шаги приведены ниже:

Откройте окно> Настройки> Maven> Архетипы

Щелкните Add Remote Catalogи добавьте следующее:

Файл каталога: http://repo1.maven.org/maven2/archetype-catalog.xml

Описание: каталог maven

ПРИМЕЧАНИЕ: ПОДКЛЮЧЕНИЕ К ИНТЕРНЕТУ НЕОБХОДИМО ВО ВРЕМЯ СОЗДАНИЯ ВАШЕГО ПЕРВОГО ПРОЕКТА MAVEN.

Бисваджит Саху
источник
загрузка указанного выше каталога и установка вручную, но у меня не сработало.
Маугли
0

номер архетипа по умолчанию теперь 1092 1092: remote -> org.apache.maven.archetypes: maven-archetype-quickstart (архетип, который содержит образец проекта Maven.)

Пратик Кушваха
источник
0

Вы можете рассмотреть Java Archetype : он имеет разумные значения по умолчанию для быстрого запуска Java-проекта в соответствии с лучшими практиками, включая тесты JUnit. Я задумал его как современного преемника maven-archetype-quickstart.

Пример: mvn archetype:generate -DarchetypeGroupId=io.github.oliviercailloux -DarchetypeArtifactId=java-archetype -DgroupId=mygroupid -DartifactId=myartifactid -DinteractiveMode=false.

Отказ от ответственности: я являюсь автором.

Для получения дополнительной информации об альтернативах, вот часть README этого проекта (он предоставляет больше ссылок, чем скопировано здесь).

Официальный архетип быстрого старта

Официальный архетип (упомянутый в Apache Maven Getting Started Guide и Apache Maven Cookbook) для простых Java-проектов - maven-archetype-quickstart или org.apache.maven.archetypes: maven-archetype-quickstart полностью.

Его следует, IMHO, считать устаревшим, поскольку он имеет несколько недостатков.

  • Важная проблема заключается в том, что он создает проекты, которые зависят от JUnit 4. Текущая версия, JUnit 5, значительно отличается, предоставляя, среди прочего, улучшенный API.
  • Незначительные недостатки: его версия по умолчанию - 1.0-SNAPSHOT, которая должна быть 1.0.0-SNAPSHOT, чтобы следовать рекомендуемой и обычной схеме.
  • Еще одна небольшая слабость: он создает проекты, настроенные для JVM 1.7. Это может быть целесообразно, если вам особенно необходимо поддерживать старые установки, но выбор достаточно свежей JVM является более разумным правилом по умолчанию для новых проектов. Например, в Java 8 появились лямбда-выражения, которые вы, вероятно, не захотите пропустить.

Мой архетип также обеспечивает ведение журнала по умолчанию, что, на мой взгляд, полезно, масштабируется лучше, чем sysout, и не причиняет вреда, а также Guava, который, на мой взгляд, полезно обогащает Java.

Другие архетипы быстрого старта в Maven Central

Чтобы по возможности объединить усилия и избежать бесполезного дублирования, я активно искал другие архетипы, которые преследовали бы ту же цель, что и моя: предоставить простой архетип с разумными значениями по умолчанию, чтобы легко начать современный Java-проект. (В основном это было сделано примерно в июне 2020 года.)

Общий поиск в Интернете привел меня к Практическому разработчику. Когда с ним связались, он написал мне (по электронной почте), что не работает над своим архетипом регулярно и поэтому предпочел отказаться от сотрудничества в таком проекте.

Поскольку поиск в сети не дал других полезных результатов, и поскольку я не нашел специализированного инструмента поиска, подходящего для моих нужд, я реализовал простой браузер архетипа. В нем перечислены все архетипы, доступные в Maven Central. Их слишком много для просмотра вручную, поэтому я выбрал те, чьи groupId и artifactId существовали не менее трех лет и обновлялись в течение последнего года, в надежде найти проекты, которые поддерживаются в долгосрочной перспективе, что, как я полагаю, указывает на скорее проект хорошего качества. (Конечно, этот фильтр мог пропустить архетипы хорошего качества, которые полностью соответствуют заявленной цели; у меня нет возможности узнать. В качестве примера, этот самый архетип не проходит этот фильтр, поскольку я со временем менял его artifactId.)

Затем я вручную отфильтровал полученный список на основе описаний архетипов, найденных в их POM, и дополнительно просмотрел (обычно на официальном веб-сайте) несколько многообещающих архетипов среди них. Только com.github.ngeor:archetype-quickstart-jdk8выяснилось, что это подходящий кандидат. Но его автор написал мне, что он «в настоящее время не особо использует / поддерживает архетип».

Оливье Кайю
источник