Как собрать проект в Maven со всеми зависимостями в исполняемый *.jar файл | Zhbert’s Home
Zhbert's Home
Домашняя страничка Zhbert'а

Как собрать проект в Maven со всеми зависимостями в исполняемый *.jar файл

Если собрать простой jar файл, то в нем не будет зависимостей. Например, если в проекте используется логгер log4j, его не будет, и при передаче исполняемого файла заказчику тот не сможет его запустить, натыкаясь на ошибку отсутствия нужной зависимости. Чтобы такого не было, нужно упаковать в исполняемый файл все необходимые зависимости, которые прописаны в файле pom.xml. Сделать это можно, добавив в параметры сборки соответствующий плагин.

Для начала нужно добавить в pom.xml конфигурацию соответствующего плагина (в раздел Plugins):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>ru.zhbert.PackageQrCodeGenerator.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <id>assemble-all</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                </execution>
            </executions>
</plugin>

В разделе <mainClass> не забудьте указать главный класс своего приложения, его можно скопировать из плагина для сборки выше.

Выполняем привычное mvn clean package: в результате будут собраны два файла, обычный *.jar и файл с суффиксом -jar-with-dependencies, весящий в несколько раз больше. Это и будет файл, в который упакованы все необходимые для работы зависимости.