В этом уроке мы покажем вам, как использовать инструмент сборки Maven, плагин для одной банки, чтобы создать одну банку вместе с ее банками зависимостей в один исполняемый файл Jar, так называемый fat Jar.
Используемые инструменты:
- Мавен 3.1.1
- JDK 1.7
- Джода-время 2,5
1. Создайте простой проект Java
Создайте проект Java из шаблона быстрого запуска Maven.
$ mvn archetype:generate -DgroupId=com.mkyong.core.utils -DartifactId=dateUtils -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Будут созданы следующие файлы и структура папок.
. |____dateUtils | |____pom.xml | |____src | | |____main | | | |____java | | | | |____com | | | | | |____mkyong | | | | | | |____core | | | | | | | |____utils | | | | | | | | |____App.java | | |____test | | | |____java | | | | |____com | | | | | |____mkyong | | | | | | |____core | | | | | | | |____utils | | | | | | | | |____AppTest.java
Сделайте так, чтобы он поддерживал Eclipse.
$ mvn eclipse:eclipse
Импортирует проект в среду разработки Eclipse.
2. Обновление Pom.xml
Обновление pom.xml
чтобы объявить зависимости от времени joda. Для вывода в формат Jar
убедитесь, что для тега упаковки установлено значение “jar”. Прочитайте комментарии для пояснения.
4.0.0 com.mkyong.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} ${jdk.version} org.apache.maven.plugins maven-jar-plugin com.mkyong.core.utils.App
3. Получить текущую дату с помощью JodaTime
Обновите сгенерированный 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
.
$ mvn package
Перечислите содержимое банки.
$ jar tf target/dateutils.jar META-INF/ META-INF/MANIFEST.MF com/ com/mkyong/ com/mkyong/core/ com/mkyong/core/utils/ com/mkyong/core/utils/App.class META-INF/maven/ META-INF/maven/com.mkyong.core.utils/ META-INF/maven/com.mkyong.core.utils/dateUtils/ META-INF/maven/com.mkyong.core.utils/dateUtils/pom.xml META-INF/maven/com.mkyong.core.utils/dateUtils/pom.properties
Попробуйте запустить этот файл Jar.
$ 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
чтобы использовать плагин с одной банкой, он создаст одну банку вместе со своими банками зависимостей.
org.dstovall onejar-maven-plugin 1.4.4 one-jar onejar-maven-plugin.googlecode.com http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
Упакуйте его снова, в папке “цель” будут созданы две банки – dateUtils.jar
и и
$ mvn package
В dateUtils-one-jar.jar
это последняя банка жира, которую вы хотите, перечислите содержимое банки:
$ 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
Плагин One-Jar помещает зависимости среды выполнения в папку lib
, например lib/joda-time-2.5.jar
, и основную банку в папке main
, например main/dateutils.jar
. Кроме того, он также создает множество классов simontuffs, которые помогают правильно загружать включенные банки.
Попробуйте запустить последнюю банку с жиром.
$ java -jar dateutils.one-jar.jar 2014-10-18
Сделано.
Скачать Исходный Код
Рекомендации
Оригинал: “https://mkyong.com/maven/maven-create-a-fat-jar-file-one-jar-example/”