Yat-il un référentiel maven application Java à démarrer rapidement 11
Il y a un archétype maven QuickStart pour Java 7, comme je peux voir ici: https://maven.apache.org/archetypes/maven-archetype-quickstart/ Le problème est quand je tire cette commande:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart
Entrez le répertoire du projet et le feu cette commande:
mvn package
Je reçois cette erreur:
[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
S'il vous plaît noter qu'il ya un problème avec mon installation JDK, comme update-alternatives
me dit que je courais 11 JDK:
$ 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
Mais, quand je lance java -version
, il me donne ceci:
$ 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)
Je ne sais pas pourquoi je ne reçois pas OpenJDK 11, malgré le fait que j'ai installé 11 seulement dans JDK premier lieu. Peut-être va commencer un thread différent sur ce point.
tl; dr
L' quickstart
archétype, malheureusement, est souvent obsolète.
Mettez à jour votre maven-surefire-plugin
élément de votre POM à la dernière version telle que 3.0.0-M3
.
Mettez à jour vos dépendances à la version actuelle
Bizarrement, l' maven-archetype-quickstart
artefact est jamais tenue à jour . Il énumère les dépendances avec les anciennes versions qui peuvent ne pas fonctionner correctement avec les dernières versions de Java, votre IDE, ou d' autres bibliothèques.
Ceci est assez frustrant, car on pourrait penser que l'artefact serait maintenu à jour via un script automatisé. Après tout, tout le point de Maven est de faire ce genre de corvée de configuration facile et automatisée!
Heureusement, vous pouvez facilement mettre à jour les numéros de version vous-même.
Comment savez-vous quel est le dernier numéro de version pour entrer pour chaque dépendance?
- Vous pouvez rechercher manuellement le dernier numéro de version en utilisant le site Web d'un dépôt Maven. Copiez-collez le numéro de version à votre POM.
- Vous pouvez laisser votre IDE (IntelliJ, NetBeans, etc.) suggèrent le dernier numéro que vous modifiez le numéro de version valeur de l' élément XML. Vous pouvez ou ne pouvez pas taper une « aide-moi » combinaison de touches en fonction de la façon dont fonctionne votre IDE. Avant de le faire, assurez - vous de mettre à jour le cache de votre IDE de données du référentiel Maven il connaît les chiffres plus récents de la version actuelle. Par exemple, dans IntelliJ aller dans les préférences, et dans le champ de recherche de paramètres, le type
repo
, et dans la liste des référentiels connus cliquez sur chaqueUpdate
bouton.
Pas
Tout d' abord, si vous utilisez votre IDE pour travailler avec Maven, assurez - vous de mettre à jour son cache de données du référentiel Maven de sorte que vous obtenez le dernier quickstart
artefact. Par exemple, dans IntelliJ, Preferences
> Build, Execution, Deployment
> Build tools
> Maven
> Repositories
> Update
bouton.
Le POM initial devrait se développer dans un plus grand. Vous devrez peut - être un Maven clean
et install
.
Après la première utilisation, passez par votre 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>
Sur chaque élément dans le POM, changer le numéro de version au plus tard.
Votre IDE peut aider en vous montrant une liste des numéros de version, il connaît.
Ou utiliser un site Web du référentiel Maven pour vérifier le dernier numéro de version. Comme cela :
Vous trouverez peut-être la plupart des articles sont hors de ce jour. En particulier, en ce qui concerne le problème de la surefire décrit dans la question, changer l'élément infaillible pour 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.