Nota: Se você for um aplicativo de inicialização rápida, leia o final da resposta
Adicione o seguinte plugin ao seu pom.xml
A versão mais recente pode ser encontrada em
...
<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>
...
Depois de configurar este plug-in, a execução mvn package
produzirá dois jars: um contendo apenas as classes do projeto e um segundo jar fat com todas as dependências com o sufixo "-jar-with-dependencies".
se quiser uma classpath
configuração correta em tempo de execução, adicione também o seguinte plugin
<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>
Para o aplicativo Spring Boot, use apenas o plugin seguinte (escolha a versão apropriada dele)
<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>
Você pode usar o plugin maven-shadow .
Depois de configurar o plugin de sombra em sua construção, o comando
mvn package
criará um único jar com todas as dependências mescladas nele.fonte
Talvez você queira
maven-shade-plugin
agrupar dependências, minimizar códigos não utilizados e ocultar dependências externas para evitar conflitos.Referências:
fonte
Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
, apenas remova<minimizeJar>true</minimizeJar>
.na verdade, adicionando o
declaração para maven-jar-plugin não adiciona a entrada de classe principal ao arquivo de manifesto para mim. Tive que adicioná-lo ao maven-assembly-plugin para obtê-lo no manifesto
fonte
Você pode usar o plugin onejar-maven para empacotamento. Basicamente, ele monta seu projeto e suas dependências em um jar, incluindo não apenas o arquivo jar do projeto, mas também todas as dependências externas como um "jar de jars", por exemplo
Nota 1: as opções de configuração estão disponíveis na página inicial do projeto .
Nota 2: Por um motivo ou outro, o projeto onejar-maven-plugin não foi publicado no Maven Central. No entanto, jolira.com rastreia o projeto original e o publica com o groupId
com.jolira
.fonte
Uma alternativa é usar o plugin de sombra maven para construir um
uber-jar
.fonte