Maven - Erstellen Sie eine fette Jar-Datei - Ein-JAR-Beispiel
In diesem Tutorial zeigen wir Ihnen, wie Sie mit dem Maven-Build-Tool One-JAR-Plugin ein einzelnes Jar zusammen mit seinen Abhängigkeits-Jars in einer einzigen ausführbaren Jar-Datei, dem so genannten Fat Jar, erstellen.
Benutztes Werkzeug :
-
Maven 3.1.1
-
JDK 1.7
-
Joda-Zeit 2.5
1. Erstellen Sie ein einfaches Java-Projekt
Erstellen Sie ein Java-Projekt aus der Maven-Schnellstartvorlage.
$ mvn archetype:generate -DgroupId=com.example.core.utils -DartifactId=dateUtils -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Die folgenden Dateien und Ordnerstrukturen werden erstellt.
. |____dateUtils | |____pom.xml | |____src | | |____main | | | |____java | | | | |____com | | | | | |____example | | | | | | |____core | | | | | | | |____utils | | | | | | | | |____App.java | | |____test | | | |____java | | | | |____com | | | | | |____example | | | | | | |____core | | | | | | | |____utils | | | | | | | | |____AppTest.java
Lassen Sie es Eclipse unterstützen.
$ mvn eclipse:eclipse
Importiert das Projekt in die Eclipse-IDE.
2. Aktualisieren Sie Pom.xml
Aktualisieren Siepom.xml
, um die Jodatime-Abhängigkeiten zu deklarieren. Stellen Sie für die Ausgabe im FormatJar
icher, dass das Verpackungsetikett auf "jar" gesetzt ist. Lesen Sie die Kommentare selbsterklärend.
pom.xml
4.0.0 com.example.core.utils dateUtils jar 1.0-SNAPSHOT dateUtils http://maven.apache.org 1.7 2.5 4.11 junit junit ${junit.version} test joda-time joda-time ${jodatime.version} dateutils org.apache.maven.plugins maven-eclipse-plugin 2.9 true false org.apache.maven.plugins maven-compiler-plugin 2.3.2 ${jdk.version} org.apache.maven.plugins maven-jar-plugin com.example.core.utils.App
3. Holen Sie sich CurrentDate mit JodaTime
Aktualisieren Sie die generiertenApp.java
mit dem folgenden Inhalt:
App.java
package com.example.core.utils; import org.joda.time.LocalDate; public class App { public static void main(String[] args) { System.out.println(getLocalCurrentDate()); } //Print current date with JodaTime private static String getLocalCurrentDate() { LocalDate date = new LocalDate(); return date.toString(); } }
4. Jar File
Maven packt das Projekt, um die endgültige Jar-Datei zu generieren. Ein neuerdateutils.jar
wird im Ordner$project/target
erstellt.
$ mvn package
Listen Sie den Inhalt des Glases auf.
$ jar tf target/dateutils.jar META-INF/ META-INF/MANIFEST.MF com/ com/example/ com/example/core/ com/example/core/utils/ com/example/core/utils/App.class META-INF/maven/ META-INF/maven/com.example.core.utils/ META-INF/maven/com.example.core.utils/dateUtils/ META-INF/maven/com.example.core.utils/dateUtils/pom.xml META-INF/maven/com.example.core.utils/dateUtils/pom.properties
Versuchen Sie, diese Jar-Datei auszuführen.
$ java -jar dateutils.jar Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/LocalDate at com.example.core.utils.App.getLocalCurrentDate(App.java:14) at com.example.core.utils.App.main(App.java:9) Caused by: java.lang.ClassNotFoundException: org.joda.time.LocalDate at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 2 more
Oben ist die erwartete Fehlermeldung, dajoda-time.jar
fehlt.
5. Ein-Glas-Beispiel
Aktualisieren Siepom.xml
, um das One-Jar-Plugin zu verwenden. Es wird ein einzelnes Jar zusammen mit seinen Abhängigkeits-Jars erstellt.
pom.xml
org.dstovall onejar-maven-plugin 1.4.4 one-jar onejar-maven-plugin.googlecode.com http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
Packen Sie es erneut, zwei Gläser werden im Zielordner erstellt -dateUtils.jar
unddateUtils-one-jar.jar
.
$ mvn package
DasdateUtils-one-jar.jar
ist das endgültige Fettglas, das Sie möchten. Listen Sie den Glasinhalt auf:
$ jar tf target/dateutils.one-jar.jar META-INF/MANIFEST.MF main/dateutils.jar lib/joda-time-2.5.jar com/ com/simontuffs/ com/simontuffs/onejar/ .version OneJar.class com/simontuffs/onejar/Boot$1.class com/simontuffs/onejar/Boot$2.class com/simontuffs/onejar/Boot$3.class com/simontuffs/onejar/Boot.class com/simontuffs/onejar/Handler$1.class com/simontuffs/onejar/Handler.class com/simontuffs/onejar/IProperties.class com/simontuffs/onejar/JarClassLoader$1.class com/simontuffs/onejar/JarClassLoader$2.class com/simontuffs/onejar/JarClassLoader$ByteCode.class com/simontuffs/onejar/JarClassLoader$FileURLFactory$1.class com/simontuffs/onejar/JarClassLoader$FileURLFactory.class com/simontuffs/onejar/JarClassLoader$IURLFactory.class com/simontuffs/onejar/JarClassLoader$OneJarURLFactory.class com/simontuffs/onejar/JarClassLoader.class com/simontuffs/onejar/OneJarFile$1.class com/simontuffs/onejar/OneJarFile$2.class com/simontuffs/onejar/OneJarFile.class com/simontuffs/onejar/OneJarURLConnection.class src/ src/com/ src/com/simontuffs/ src/com/simontuffs/onejar/ src/OneJar.java src/com/simontuffs/onejar/Boot.java src/com/simontuffs/onejar/Handler.java src/com/simontuffs/onejar/IProperties.java src/com/simontuffs/onejar/JarClassLoader.java src/com/simontuffs/onejar/OneJarFile.java src/com/simontuffs/onejar/OneJarURLConnection.java doc/ doc/one-jar-license.txt
Das Ein-Jar-Plugin legt die Laufzeitabhängigkeiten im Ordnerlib
ab, z. B.lib/joda-time-2.5.jar
, und das Haupt-Jar im Ordnermain
, z. B.main/dateutils.jar
. Darüber hinaus werden viele Simontuffs-Klassen erstellt, um das korrekte Laden der enthaltenen Jars zu erleichtern.
Versuchen Sie, das letzte Fettglas laufen zu lassen.
$ java -jar dateutils.one-jar.jar 2014-10-18
Erledigt.
Quellcode herunterladen
Herunterladen -maven-one-jar-example.zip (6 KB)