Домой Учебники по Java и J2EE Используйте «maven-shade-plugin», чтобы создать только 1 исполняемый jar со всеми необходимыми зависимостями...

Используйте «maven-shade-plugin», чтобы создать только 1 исполняемый jar со всеми необходимыми зависимостями в нем для вашего Java или Spring Project?

1108
0

Просто создайте Crunchify.jar файл со всеми зависимостями внутри него

На прошлой неделе я написал учебник о том, как использовать maven-resources-plugin , maven-dependency-plugin & maven-jar-plugin создать свой полный исполняемый Jar Project? В результате он создает / копирует все необходимые файлы в /target/Crunchify папка.

Before: Использование плагинов maven-resource, maven-dependency, maven-jar:

After: Использование плагина maven-shade:

Давайте начнем с того, как достичь вышеуказанного результата:

Здесь, как вы видите, мы объединили все из Java Project в just one file и мы дали имя Crunchify.jar (со всеми файлами внутри).

Несколько дней назад я понятия не имел о том, как этого добиться, поскольку я хотел создать runnable binary distribution of a standalone Java application с помощью Maven. Другими словами:

  1. Как создать исполняемый jar на основе пружин с Maven?
  2. Создание запускаемого двоичного дистрибутива с Maven для Java + Spring + другие зависимости
  3. Как создать проекты Java + Spring с Maven?

Обычно в Maven мы полагаемся на управление зависимостями. Артефакт просто содержит классы / ресурсы самого себя. Maven будет нести ответственность за выяснение всех артефактов (JAR и т. Д.), От которых зависит проект, при компиляции и запуске и т. Д.

С помощью maven-shade-plugin Я был в состоянии достичь этого . Это дает возможность упаковать артефакт в uber-jar (One major file jar) , включая его зависимости, и затемнение — то есть переименование — пакетов некоторых зависимостей.

В моем проекте у меня так много других зависимостей, например Spring Framework , JSON , сторонние инструменты и т. Д. Ниже приведен пример проекта, но мой рабочий файл .jar вышел на ~5.2MB big ,

uber-jar это то, что берет все зависимости , извлекает содержимое зависимостей и помещает его в один JAR с классами / ресурсами самого проекта. Имея такой uber-jar, это easy for execution потому что для запуска вашего приложения вам понадобится только один большой JAR вместо множества маленьких JAR. Это также облегчает распространение в некоторых случаях.

Для этого вам необходимо обновить файл pom.xml.

Шаг 1

Посмотрите на полный pom.xml файл. В основном вы были бы заинтересованы в тег.

pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
< project xmlns = http://maven.apache.org/POM/4.0.0 xmlns : xsi = http://www.w3.org/2001/XMLSchema-instance
xsi : schemaLocation = http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd >
< modelVersion > 4.0.0 < / modelVersion >
< groupId > CrunchifyMavenBuildPlugins < / groupId >
< artifactId > CrunchifyMavenBuildPlugins < / artifactId >
< версия > 0.0.1SNAPSHOT < / версия >
< name > CrunchifyMavenBuildPlugins < / name >
< свойства >
< проект . построить . sourceEncoding > UTF8 < / project . построить . sourceEncoding >
< / properties >
< зависимости >
< зависимость >
< groupId > log4j < / groupId >
< artifactId > log4j < / artifactId >
< версия > 1.2.17 < / версия >
< / зависимость >
< зависимость >
< groupId > ком . GoogleCode. JSONпростой < / groupId >
< artifactId > jsonпростой < / artifactId >
< версия > 1.1 < / версия >
< / зависимость >
< зависимость >
< groupId > axis < / groupId >
< artifactId > axis < / artifactId >
< версия > 1.4 < / версия >
< / зависимость >
< зависимость >
< groupId > commonsbeanutils < / groupId >
< artifactId > commonsbeanutils < / artifactId >
< версия > 1.8.3 < / версия >
< / зависимость >
< зависимость >
< groupId > commonscollection < / groupId >
< artifactId > commonscollection < / artifactId >
< версия > 3.2.1 < / версия >
< / зависимость >
< зависимость >
< groupId > commonsконфигурация < / groupId >
< artifactId > commonsконфигурация < / artifactId >
< версия > 1.10 < / версия >
< / зависимость >
< зависимость >
< groupId > commonsio < / groupId >
< artifactId > commonsio < / artifactId >
< версия > 2.4 < / версия >
< / зависимость >
< зависимость >
< groupId > javax . mail < / groupId >
< artifactId > mail < / artifactId >
< версия > 1.4.7 < / версия >
< / зависимость >
< зависимость >
< groupId > javax . сервлет < / groupId >
< artifactId > сервлетapi < / artifactId >
< версия > 2.5 < / версия >
< / зависимость >
< зависимость >
< groupId > org . JSON идентификатор_группы>
< artifactId > json < / artifactId >
< версия > 20140107 < / версия >
< / зависимость >
< зависимость >
< groupId > axis < / groupId >
< artifactId > axissaaj < / artifactId >
< версия > 1.4 < / версия >
< / зависимость >
< зависимость >
< groupId > wsdl4j < / groupId >
< artifactId > wsdl4j < / artifactId >
< версия > 1.6.3 < / версия >
< / зависимость >
< зависимость >
< groupId > ком . Google. zxing < / groupId >
< artifactId > core < / artifactId >
< версия > 2.0 < / версия >
< / зависимость >
< / зависимости >
< build >
< pluginManagement >
< плагины >
< плагин >
< groupId > org . апач . Maven . плагины < / groupId >
< artifactId > mavenкомпиляторплагин < / artifactId >
< версия > 2.3.1 < / версия >
< конфигурация >
< source > 1.7 < / source >
< target > 1.7 < / target >
< / configuration >
< / plugin >
< / plugins >
< / pluginManagement >
< плагины >
< плагин >
< groupId > org . апач . Maven . плагины < / groupId >
< artifactId > mavenshadeplugin < / artifactId >
< версия > 1.7 < / версия >
< казни >
< исполнение >
< фаза > пакет < / фаза >
< цели >
< цель > тень < / цель >
< / цели >
< конфигурация >
< ! Дополнительный старт >
< finalName > Crunchify < / finalName >
< shadedArtifactAttached > true < / shadedArtifactAttached >
< shadedClassifierName > jarwithdependencies < / shadedClassifierName >
< ! Необязательный конец >
< трансформаторы >
< transformer реализация = org.apache.maven.plugins.shade.resource.ManifestResourceTransformer >
< mainClass > ком . crunchify. учебник . CrunchifyMain < / mainClass >
< / transformer >
< трансформаторная реализация = org.apache.maven.plugins.shade.resource.AppendingTransformer >
     < ресурс > METAINF / весна . обработчики < / resource >
< / transformer >
< трансформаторная реализация = org.apache.maven.plugins.shade.resource.AppendingTransformer >
     < ресурс > METAINF / весна . схемы < / resource >
< / transformer >
< трансформаторная реализация = org.apache.maven.plugins.shade.resource.AppendingTransformer >
     < ресурс > METAINF / весна . оснастка < / resource >
< / transformer >
< / трансформаторы >
< / configuration >
< / выполнение >
< / казни >
< / plugin >
< / plugins >
< / build >
< / project >

Как вы можете видеть здесь, я использую Resource Transformers в файле pom.xml. Агрегирование classes/resources из нескольких артефактов в один Crunchify JAR прямолинейно, пока нет перекрытия. В противном случае требуется некоторая логика для объединения ресурсов из нескольких JAR-файлов. Это где трансформеры ресурса начинают действовать.

Шаг 2

Как только вы добавите maven-shade-plugin на ваш pom.xml файл, затем просто используйте команду ниже, чтобы построить свой проект.

1
mvn clean install

И вы должны увидеть один Crunchify.jar (Uber-JAR) файл, созданный с all dependencies mentioned in pom.xml file внутри.

Шаг 3

Перейдите в целевую папку вашего проекта, и вы увидите созданный файл Crunchify.jar. Просто используйте команду

$bash> java -jar Crunchify.jar выполнить ваш проект.

У вас есть что добавить? Добавьте его в раздел комментариев ниже. Наслаждайтесь, хорошего дня вперед и счастливого кодирования.

Используйте «maven-shade-plugin», чтобы создать только 1 исполняемый jar со всеми необходимыми зависимостями в нем для вашего Java или Spring Project?

0.00 (0%) 0 votes

ЧИТАТЬ ТАКЖЕ:  Как реализовать команду утилиты Linux PING в Java?

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь