Días atrás tuve que desarrollar un pequeño cliente standalone con algunas dependencias para automatizar unas peticiones a un servicio web. Al momento de ejecutarlo desde Netbeans no hubo problemas. Estos comenzaron a presentarse cuando intente ejecutar la aplicación desde consola mediante el comando java -jar, ya que primero no encontraba la clase principal y luego no encontraba las clases que estaban contenidas en las dependencias arrojando un error de java.lang.ClassNotFoundException.
Para solucionar estos inconvenientes, añadí en el archivo pom.xml un plugin llamado "maven-assembly-plugin", el cual nos permite crear un archivo .jar ejecutable incluyendo todas las dependencias dentro de el.
Dentro de la sección "plugins", debemos agregar lo siguiente:
<!-- Maven assembly-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.fcastillo.upload.files.app.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Es muy importante que entre las etiquetas <manifest>, coloquemos el nombre de la clase principal o ejecutable, que en este caso es App y esta dentro del paquete com.fcastillo.upload.files.app.
Con esto solo nos resta ubicarnos en la raíz de nuestro proyecto y ejecutar el comando: mvn package
Maven comenzara a descargar las dependencias y a empaquetarlas en un archivo jar. En la siguiente salida de consola vemos que se crearon dos archivos:
*upload-file.jar
*upload-file-jar-with-dependencies.jar (es el que debemos usar)
Con esto ya podremos ejecutar nuestro archivo jar sin problemas mediante java -jar upload-file-jar-with-dependencies.jar







