Maven - Создание толстого JAR-файла - Пример One-JAR
В этом руководстве мы покажем вам, как использовать инструмент сборки Maven, плагин One-JAR, для создания одного Jar вместе с его зависимостями Jar в один исполняемый файл Jar, так называемый fat Jar.
Используемые инструменты:
Maven 3.1.1
JDK 1,7
Джода-тайм 2,5
1. Создайте простой Java-проект
Создайте проект Java из шаблона быстрого запуска Maven.
Обновитеpom.xml, чтобы объявить зависимости jodatime. Для вывода в форматеJar убедитесь, что для тега упаковки установлено значение «jar». Прочитайте комментарии для самоочевидных.
Обновите сгенерированныйApp.java следующим содержанием:
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 упакует проект для создания окончательного файла Jar. Новыйdateutils.jar создается в папке$project/target.
$ 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
Выше показано ожидаемое сообщение об ошибке, потому чтоjoda-time.jar отсутствует.
5. Пример одной банки
Обновитеpom.xml для использования плагина One-Jar, он создаст один Jar вместе со своими Jar-файлами зависимостей.
Плагин One-Jar помещает зависимости времени выполнения в папкуlib, напримерlib/joda-time-2.5.jar, и основную банку в папкуmain, напримерmain/dateutils.jar. Кроме того, он также создает множество классов simontuffs, чтобы помочь правильно загрузить включенные Jar-файлы.