Wie kann Maven ein ausführbares Glas erzeugen, ohne sich auf ein externes Paket zu verlassen?
Wenn der POM keine Referenzen enthält, fügen Sie einfach maven-jar-plugin zum POM hinzu.
Lösungsprozess
Erstellen Sie ein neues Projekt, nur eine Hauptfunktionsklasse: xixi.java, Ausgabe Xixi Say: hello
Der POM ist als konfiguriert als
<gruppe> com.paxi </GroupId> <artifactId> xixi </artifactId> <version> 1.0-snapshot </Version> <Packages> jar </packaging> <name> xixi </name> <URL> http://maven.apache.org </url> <url> <url> http <project.build.sourceEnecoding> utf-8 </project.build.SourceEncoding> </Properties>
Führen Sie mvn clean install aus, um das JAR-Paket xixi-1.0-SNAPSHOT.jar, den Befehl JAR auszuführen und Feedback-Fehler auszuführen
java -jar xixi-1.0-snapshot.jarxixi-1.0-snapshot.jar hat kein Hauptmanifestattribut
Dekomprimieren
Cat Meta-inf/Manifest.MfManifest-Version: 1.0Archiver-Version: Plexus Archiverbuilt-by: paxicreated-by: Apache Maven 3.3.3build-Jdk: 1.8.0_121
Fügen Sie Plugin maven-jar-plugin in POM hinzu
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <mainClass>com.paxi.Xixi</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </bauen>
Erfolgreiche Ausgabe ausführen
java -jar xixi-1.0-snapshot.jar
Xixi Say: Hallo
Überprüfen Sie dann die dekomprimierte Manifest.mf -Datei als
Cat Meta-inf/Manifest.MfManifest-Version: 1.0built-by: paxicreated-by: Apache Maven 3.3.3build-jdk: 1.8.0_121main-Klasse: com.paxi.xixi // hinzugefügt
Fügen Sie Abhängigkeiten in POM hinzu. Wie erzeugt Maven ausführbare Gläser?
Sie müssen Plugins Maven-Abhängigkeits-Plugin und Maven-Jar-Plugin verwenden.
Lösungsprozess
Fügen Sie POM nur Apache-Commons-Paket hinzu
<gruppe> com.paxi </GroupId> <artifactId> xixi </artifactId> <version> 1.0-snapshot </Version> <Packages> jar </packaging> <name> xixi </name> <URL> http://maven.apache.org </url> <url> <url> http <project.build.sourceEnecoding> utf-8 </project.build.SourceEncoding> </properties> <abhängigkeiten> <depecture> <gruppe.apache.apache
Verwenden Sie eine Klasse im gemeinsamen Paket im Code
public static void main (String [] args) {String words = "xixi Say: Hallo"; if (stringutils.isnotblank (Wörter)) {System.out.println (Wörter); }}Nach der Verpackung trat ein Fehler auf
java -jar xixi-1.0-snapshot.jar
Ausnahme im Thread "Haupt" java.lang.noclassDeffoundError: org/apache/commons/Lang3/Stringutils
bei com.paxi.xixi.main (xixi.java:11)
Verursacht durch: java.lang.classnotfoundException: org.apache.commons.lang3.stringutils
unter java.net.urlclassloader.findClass (urlclassloader.java:381)
unter java.lang.classloader.loadClass (classloader.java:424)
bei sun.misc.launcher $ appclassloader.loadClass (Launcher.java:331)
unter java.lang.classloader.loadClass (classloader.java:357)
... 1 mehr
Fügen Sie Plugins in POM hinzu
<build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.0</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.paxi.Xixi</mainClass> <classpathPrefix>libs/</classpathPrefix> </manifest> </archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependent-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy-dependents</id> <phase>package</phase> <goals> <goal>copy-dependents</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/libs </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>Wieder laufen
Java-Jar Xixi-1.0-Snapshot.jarxixi Say: Hallo
Manifest.mf -Datei ist
Cat Meta-inf/Manifest.MfManifest-Version: 1.0Built-by: Paxiclass-Pfad: libs/commons-Lang3-3.7.Jarcreated-by: Apache Maven 3.3.3build-Jdk: 1.8.0_121Main-Class: com.paxi.xixi.xixi.
Es verwendet nicht nur Abhängigkeiten in POM, sondern auch Drei-Parteien-Gläser. Wie generiert Maven ausführbare Gläser?
Der Kompilierungsprozess erfordert eine Änderung des Kompilierungs-Plugin maven-compiler-plugin . Beim Ausführen müssen Sie ein Verzeichnis mit Drei-Parteien-Gläser hinzufügen, um die Befehle auszuführen.
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: Hellopapa sagt: Hallo
Zusammenstellung und Lösungsprozess
Der Testcode ist
public static void main (String [] args) {String words = "xixi Say: Hallo"; if (stringutils.isnotblank (Wörter)) {System.out.println (Wörter); } Papa.say (); }Verwenden Sie den MVN -Befehl, um Fehler auszuführen
[ERROR] ziel nicht ausführte org.apache.maven.plugins: maven-compiler-plugin: 3.1: kompilieren (Standardkompile) für Projekt XIXI: Kompilierungsfehler
xixi/src/main/java/com/paxi/xixi.java: [15,9] Symbol nicht gefunden
Fügen Sie das Compilation -Plugin zu POM hinzu
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <compilerArgs> <arg>-Djava.ext.dirs=lib/</arg> </compilerArgs> </configuration> </plugin>
Paketausführung
java -jar target/xixi-1.0-snapshot.jarxixi Say: HelloException in Thread "Haupt" java.lang.noclassDeffoundError: com/paxi/papa bei com.paxi.xixi.main (xixi.java:15) verursacht von: java.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.Lang.Lang.Lang.Lang.Lang.Lang. java.net.urlclassloader.findclass (urlclassloader.java:381) unter java.lang.classloader.loadClass (classloader.java:424) unter sun.misc.launchner $ AppClassloader.loadClass (Launcher.java:331) ATRADER) ATRADER) ATRADER) ATRADER) ATRADER) ATRADER) (Java:331)) ATRACTLASS) java.lang.classloader.loadClass (classloader.java:357) ... 1 Weitere
Fügen Sie Parameter hinzu, um das Ergebnis zu erhalten
java -jar -djava.ext.dirs = lib/ target/ xixi -1.0 -snapshot.jarxixi Say: Hellopapa sagt: Hallo
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.