Uwaga: jeśli korzystasz z aplikacji uruchamianej wiosną, przeczytaj koniec odpowiedzi
Dodaj następującą wtyczkę do swojej pom.xml
najnowszej wersji można znaleźć pod adresem
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>CHOOSE LATEST VERSION HERE</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>assemble-all</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
Po skonfigurowaniu tej wtyczki, uruchomienie mvn package
utworzy dwa pliki jar: jeden zawierający tylko klasy projektu, a drugi fat jar ze wszystkimi zależnościami z przyrostkiem „-jar-with-dependencies”.
jeśli chcesz poprawną classpath
konfigurację w czasie wykonywania, dodaj również następującą wtyczkę
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Do aplikacji rozruchu sprężynowego użyj poniższej wtyczki (wybierz odpowiednią jej wersję)
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<mainClass>${start-class}</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Możesz użyć wtyczki maven-shadow-plugin .
Po skonfigurowaniu wtyczki cieniowania w kompilacji polecenie
mvn package
utworzy jeden pojedynczy plik jar ze wszystkimi zależnościami scalonymi z nim.źródło
Może chcesz
maven-shade-plugin
spakować zależności, zminimalizować nieużywany kod i ukryć zewnętrzne zależności, aby uniknąć konfliktów.Bibliografia:
źródło
Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
, po prostu usuń<minimizeJar>true</minimizeJar>
.właściwie, dodając
Deklaracja do maven-jar-plugin nie dodaje dla mnie głównego wpisu klasy do pliku manifestu. Musiałem dodać go do wtyczki maven-assembly-plugin, aby uzyskać to w manifeście
źródło
Do pakowania można użyć wtyczki onejar-maven-plugin . Zasadniczo gromadzi projekt i jego zależności w jednym pliku jar, obejmującym nie tylko plik jar projektu, ale także wszystkie zależności zewnętrzne jako „jar of jars”, np.
Uwaga 1: Opcje konfiguracji są dostępne na stronie głównej projektu .
Uwaga 2: Z jednego lub drugiego powodu projekt onejar-maven-plugin nie został opublikowany w Maven Central. Jednak jolira.com śledzi oryginalny projekt i publikuje go pod adresem groupId
com.jolira
.źródło
Alternatywą jest użycie maven odcień wtyczki zbudować
uber-jar
.źródło