2017-12-19 3 views
0

Ich baue ein Jigsaw-Modul Maven.Here ist gefundenJava 9 Maven Modul nicht eine einfache Klasse in der Konsole

module org.abondar.experimental.intro { 

exports org.abondar.experimental.intro; 
} 

Maven Compiler-Plugin set up

<plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.7.0</version> 
       <configuration> 
        <jdkToolchain> 
         <version>[1.8,9)</version> 
        </jdkToolchain> 
        <source>9</source> 
        <target>9</target> 
       </configuration> 
      </plugin> 
    </plugins> 
    </build> 

Und Jar Plugin

<build> 
     <sourceDirectory>src/main/org.abondar.experimental.intro</sourceDirectory> 
     <plugins> 
      <plugin> 
       <!-- Build an executable JAR --> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>org.abondar.experimental.intro.Welcome</mainClass> 
         </manifest> 
         <manifestEntries> 
          <Class-Path>./lib</Class-Path> 
          <Module-Path>./mods</Module-Path> 
         </manifestEntries> 
        </archive> 
       </configuration> 
      </plugin> 

     </plugins> 
    </build> 

Also in der IDE funktioniert dieser Code wie erwartet. Aber in der Konsole gibt getModule null zurück. Ich glaube, ich habe eines der Maven-Plugins falsch konfiguriert, da sich das Konsolenmodul nicht im Modulpfad befindet. Also was genau ist wr

+0

Welchen Befehl ausgeführt haben Sie dies über die Konsole ausführen verwenden? Und wenn Sie tatsächlich in die IDE-Protokolle schauen und prüfen könnten, welcher Befehl von ihr ausgeführt wird? – nullpointer

+0

Verwende nicht ' src/main/org.abondar.experimental.intro' .. Bewahre die Konventionen und lege den Quellcode in 'src/main/java' ... und lege die 'module-info.java' in' src/main/java' .. – khmarbaise

+0

@nullpointer Ich habe java -jar benutzt, was nicht korrekt war –

Antwort

0

In Ordnung, nach einiger Zeit und sorgfältiges Lesen habe ich meinen Fehler verstanden: Ich habe nicht richtig jar laufen.

Also hier, wie es sein sollte:

java --module-path target/Intro-1.0.jar -m org.abondar.experimental.intro/org.abondar.experimental.intro.Welcome 

Statt nur

java -jar target/Intro-1.0.jar 
+0

Wenn die Hauptklasse im MANIFEST definiert ist. Es gibt keinen anderen Grund, warum ich derzeit sehe, warum 'java -jar ...' nicht funktionieren sollte. Anders als die schlechte Ordner Benennung bereits von khmarbaise hingewiesen. Können Sie erklären, warum 'java -jar' nicht funktioniert hat? – nullpointer

+0

Aus dem Buch "Java 9 für frühe Einführung und Migration": Die Option -jar existierte vor JDK 9. In JDK 9 kann ein Typ als Teil eines Moduls über einen Modulpfad oder über einen Klassenpfad geladen werden. Wenn ein Typ über einen Klassenpfad geladen wird, wird der Typ Mitglied eines Moduls, das als unbenanntes Modul bezeichnet wird. Der Typ verliert seine Mitgliedschaft von seinem ursprünglichen Modul, obwohl der Typ von einem modularen JAR geladen wird. Wenn eine modulare JAR in den Klassenpfad platziert wird, wird sie als JAR (keine modulare JAR) behandelt, wobei ihre Modulinformationen ignoriert werden. Klassendatei. " –

Verwandte Themen