Gibt es ein Maven-Repository Java 11 App Quickstart

Prakhar Mishra:

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-alternativesmir 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.

Basil Bourque:

tl; dr

Das quickstartUrbild leider oft out-of-date.

Aktualisieren Sie Ihr maven-surefire-pluginElement 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-quickstartwird 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 - UpdateTaste.

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 quickstartArtefakt. Zum Beispiel in IntelliJ, Preferences> Build, Execution, Deployment> Build tools> Maven> Repositories> UpdateTaste.

Geben Sie hier image description

Die anfängliche POM sollte in einem größeren erweitern. Sie können eine Maven benötigen cleanund 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.

Geben Sie hier image description

Oder eine Maven - Repository Website verwendet die neueste Versionsnummer zu überprüfen. Wie dies :

Geben Sie hier image description

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.

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=181984&siteId=1
Empfohlen
Rangfolge