В этом уроке мы покажем вам, как использовать инструмент сборки Maven, плагин для одной банки, чтобы создать одну банку вместе с ее банками зависимостей в один исполняемый файл Jar, так называемый fat Jar.
Используемые инструменты:
Мавен 3.1.1
JDK 1.7
Джода-время 2,5
1. Создайте простой проект Java
Создайте проект Java из шаблона быстрого запуска Maven.
Обновление pom.xml чтобы объявить зависимости от времени joda. Для вывода в формат Jar убедитесь, что для тега упаковки установлено значение “jar”. Прочитайте комментарии для пояснения.
Обновите сгенерированный App.java со следующим содержанием:
package com.mkyong.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
Maven упаковывает проект для создания окончательного файла Jar. Новый dateutils.jar создается в папке $project/target .
$ java -jar dateutils.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/joda/time/LocalDate
at com.mkyong.core.utils.App.getLocalCurrentDate(App.java:14)
at com.mkyong.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 помещает зависимости среды выполнения в папку lib , например lib/joda-time-2.5.jar , и основную банку в папке main , например main/dateutils.jar . Кроме того, он также создает множество классов simontuffs, которые помогают правильно загружать включенные банки.