Включая зависимости в банке с Maven - PullRequest
307 голосов
/ 13 ноября 2009

Есть ли способ заставить maven (2.0.9) включить все зависимости в один файл jar?

У меня есть проект сборки в один файл JAR. Я хочу, чтобы классы из зависимостей также копировались в jar.

Обновление: Я знаю, что не могу просто включить файл JAR в файл JAR. Я ищу способ распаковать файлы jar, указанные как зависимости, и упаковать файлы классов в мой файл jar.

Ответы [ 13 ]

0 голосов
/ 17 октября 2016

Спасибо Я добавил ниже фрагмент в файле POM.xml и проблема Mp решена и создать толстый файл jar, содержащий все зависимые файлы jar.

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <descriptorRefs>
                <descriptorRef>dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
    </plugin>
</plugins>
0 голосов
/ 17 июня 2016

Посмотрите на этот ответ:

Я создаю установщик, который запускается как файл JAR Java, и ему необходимо распаковать файлы WAR и JAR в соответствующие места в каталоге установки. Плагин зависимости можно использовать на этапе пакета с целью копирования, и он загрузит любой файл в репозиторий Maven (включая файлы WAR) и запишет их там, где они вам нужны. Я изменил выходной каталог на $ {project.build.directory} / classes, и в результате я получил обычную задачу JAR, в которую включены мои файлы. Затем я могу извлечь их и записать в каталог установки.

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
    <execution>
        <id>getWar</id>
        <phase>package</phase>
        <goals>
            <goal>copy</goal>
        </goals>
        <configuration>
            <artifactItems>
                <artifactItem>
                    <groupId>the.group.I.use</groupId>
                    <artifactId>MyServerServer</artifactId>
                    <version>${env.JAVA_SERVER_REL_VER}</version>
                    <type>war</type>
                    <destFileName>myWar.war</destFileName>
                </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/classes</outputDirectory>
        </configuration>
    </execution>
</executions>

0 голосов
/ 08 ноября 2014

Этот пост может быть немного старым, но у меня тоже недавно была такая же проблема. Первое решение, предложенное Джоном Штауффером, является хорошим, но у меня были некоторые проблемы, так как я работаю этой весной. Я использую пружинные зависимости-файлы, которые я использую, имеет несколько файлов свойств и объявление xml-схем, которые имеют одинаковые пути и имена. Несмотря на то, что эти файлы находятся в тех же версиях, maven-goal jar-with-dependencies перезаписывал файл тезисов последним найденным файлом.

В итоге приложение не удалось запустить, поскольку пружинные банки не смогли найти правильные файлы свойств. В этом случае решение, предложенное Rop, решило мою проблему.

Также с тех пор проект весенней загрузки теперь существует. У него есть очень крутой способ справиться с этой проблемой, предоставив maven цель, которая перегружает цель пакета и предоставляет собственный загрузчик классов. См. пружинные сапоги Справочное руководство

...