ТЛ; др
Архетип quickstart
, к сожалению, часто устарел.
Обновите элемент maven-surefire-plugin
вашего POM до последней версии, такой как 3.0.0-M3
.
Обновите ваши зависимости до текущей версии
Как ни странно, артефакт maven-archetype-quickstart
никогда не обновляется . В нем перечислены зависимости от старых версий, которые могут плохо работать с последними версиями Java, вашей IDE или другими библиотеками.
Это довольно неприятно, так как вы думаете, что артефакт будет обновляться с помощью некоторых автоматических сценариев. В конце концов, основная задача Maven - сделать рутинную работу по настройке простой и автоматизированной!
К счастью, вы можете легко обновить номера версий самостоятельно.
Откуда вы знаете, какой номер последней версии вводить для каждой зависимости?
- Вы можете вручную найти номер последней версии, используя веб-сайт репозитория Maven. Скопируйте и вставьте номер версии в POM.
- Вы можете разрешить вашей IDE (IntelliJ, NetBeans и т. Д.) Предлагать последний номер при редактировании значения элемента XML номера версии. Вы можете или не можете вводить некоторые «help-me» нажатия клавиш в зависимости от того, как работает ваша IDE. Перед этим обязательно обновите кэш данных хранилища Maven в своей среде IDE, чтобы он знал текущие номера последних версий. Например, в IntelliJ перейдите в настройки и в поле поиска настроек введите
repo
, а в списке известных репозиториев нажмите каждую кнопку Update
.
Steps
Во-первых, если вы используете вашу IDE для работы с Maven, обязательно обновите кэш данных репозитория Maven, чтобы получить последний quickstart
артефакт. Например, в IntelliJ кнопка Preferences
> Build, Execution, Deployment
> Build tools
> Maven
> Repositories
> Update
.


The initial POM should expand into a bigger one. You may need a Maven clean
and install
.
After first use, go through your POM.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>work.basil.work.example</groupId>
<artifactId>quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<name>quickstart</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Для каждого элемента в POM измените номер версии на последний.
Ваша IDE может помочь, показывая вам список номеров версий, о которых она знает.

Или воспользуйтесь веб-сайтом репозитория Maven для проверки номера последней версии. Как это :

Вы можете обнаружить, что большинство предметов устарели. В частности, в связи с проблемой верной ошибки, описанной в Вопросе, измените элемент верной версии на v3
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
Это исправит ваш surefire
специально, по моему опыту. Некоторые проблемы были недавно исправлены в более поздних версиях. Я не помню характер проблем, возможно, связанных с Java Platform Module System .
Моя версия POM после обновления до последней на 2019-05-29.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>work.basil.work.example</groupId>
<artifactId>quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<name>quickstart</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.5.0-M1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
JUnit
Обратите внимание, я также обновил JUnit с v4 до значительно улучшенного v5 "Юпитер". Если вы сделаете это, вам также потребуется обновить файл AppTest.java
, чтобы просто изменить строки import
.
Старый:
package work.basil.work.example;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}
Новое:
package work.basil.work.example;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}
Наконец, сделайте Maven clean
и install
, чтобы получить последние версии ваших зависимостей, фактически установленных внутри вашего приложения.
Кстати, для получения дополнительной информации о JUnit Jupiter и о том, как запустить старые тесты JUnit 3 и 4, см. мой ответ на другой вопрос.