Es ist ein quickstart Maven Urbild für Java 7, wie ich hier sehen kann: https://maven.apache.org/archetypes/maven-archetype-quickstart/ Das Problem dabei ist , wenn ich diesen Befehl ausgelöst:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart
Geben Sie Projektverzeichnis und feuern diesen Befehl ein:
mvn package
Ich bekomme diese Fehlermeldung:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project gfg-stuff: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test failed. NullPointerException
Bitte beachten Sie, dass es ein Problem mit meinem JDK ist installieren, da update-alternatives
mir sagt , dass ich JDK bin mit 11:
$ sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1081 manual mode
Aber, wenn ich laufe java -version
, es gibt mir diese:
$ java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3, mixed mode)
Ich bin nicht sicher, warum ich bin nicht immer OpenJDK 11, trotz der Tatsache, dass ich JDK installierte 11 nur in dem ersten Platz. Vielleicht einen anderen Thread auf, dass starten.
tl; dr
Das quickstart
Urbild leider oft out-of-date.
Aktualisieren Sie Ihr maven-surefire-plugin
Element Ihrer POM auf die neueste Version wie 3.0.0-M3
.
Aktualisieren Sie Ihre Abhängigkeiten auf die aktuelle Version
Merkwürdig ist , dass das maven-archetype-quickstart
wird Artefakt nie gehalten up-to-date . Es listet Abhängigkeiten mit alten Versionen , die nicht gut mit den neuesten Versionen von Java, IDE oder anderen Bibliotheken arbeiten.
Das ist ziemlich frustrierend, wie Sie das Artefakt denken würde über einige automatisierte Scripting würde gehalten werden up-to-date. Schließlich ist der gesamte Punkt von Maven diese Art der Konfiguration lästige Pflicht einfach und automatisiert zu machen!
Glücklicherweise kann man leicht die Versionsnummern selbst aktualisieren.
Wie wissen Sie, was ist die neueste Version Nummer für jede Abhängigkeit eingeben?
- Sie können manuell die aktuelle Versionsnummer mit der Website eines Maven-Repository suchen. Copy-Paste die Versionsnummer auf Ihre POM.
- Sie können Ihre IDE (IntelliJ, NetBeans, etc.) deuten darauf hin , die aktuelle Nummer lassen , wie Sie die Versionsnummer XML - Element - Wert bearbeiten. Sie können oder können nicht einige „help-me“ Tastendruck je nachdem , wie Sie Ihre IDE Arbeiten zu geben. Bevor Sie dies tun, sollten Sie Ihre IDE-Cache von Maven Repository - Daten aktualisieren , damit sie die aktuellen neuesten Versionsnummern kennt. Zum Beispiel in IntelliJ zu Präferenzen gehen und in dem Suchfeld für Einstellungen, geben
repo
, und in der Liste der bekannten Repositorys jede Klick -Update
Taste.
Schritte
Erstens, wenn Ihre IDE Arbeit mit Maven verwenden, müssen Sie den Cache von Maven Repository - Daten aktualisieren , so dass Sie die neueste bekommen quickstart
Artefakt. Zum Beispiel in IntelliJ, Preferences
> Build, Execution, Deployment
> Build tools
> Maven
> Repositories
> Update
Taste.
Die anfängliche POM sollte in einem größeren erweitern. Sie können eine Maven benötigen clean
und install
.
Nach dem ersten Gebrauch, gehen Sie durch Ihre 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>
An jedem Element in der POM, ändern Sie die Versionsnummer auf die neueste.
Ihr IDE kann durch zeigt Ihnen eine Liste der Versionsnummern unterstützen sie kennt.
Oder eine Maven - Repository Website verwendet die neueste Versionsnummer zu überprüfen. Wie dies :
Sie können die meisten Elemente sind out-of-date zu finden. Insbesondere in Bezug auf das todsichere Problem in der Frage beschrieben, ändern Sie das todsichere Element v3.
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
This will fix your surefire
specifically, in my experience. Some problems were recently fixed in later versions. I don’t recall the nature of the problems, perhaps related to the Java Platform Module System.
My version of the POM after updating to the latest as of 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
Notice I also updated JUnit from v4 to the vastly improved v5 "Jupiter". If you do this, you will also need to update the AppTest.java
file to simply change the import
lines.
Old:
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 );
}
}
New:
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 );
}
}
Lastly, do a Maven clean
and install
to get those latest versions of your dependencies actually installed inside your app.
By the way, for more about JUnit Jupiter, and how to run old JUnit 3 & 4 testes, see my Answer to another Question.