¿Cómo construir JAR desde IntelliJ IDEA correctamente?

9 minutos de lectura

Tengo un proyecto que contiene un solo módulo y algunas dependencias. Me gustaría crear un JAR, en un directorio separado, que contenga el módulo compilado. Además, me gustaría tener las dependencias presentes al lado de mi módulo.

No importa cómo gire el proceso de “construir JAR” de IntelliJ, la salida de mi módulo aparece vacía (además de un META-INF archivo).

Instrucciones:

Archivo -> Estructura del proyecto -> Configuración del proyecto -> Artefactos -> Haga clic en + (signo más) -> Frasco -> Desde módulos con dependencias...

Seleccione un Clase principal (el que tiene main() método) si necesita hacer que el jar se pueda ejecutar.

Seleccionar Extraer al tarro de destino

Hacer clic DE ACUERDO

Hacer clic Aplicar/DE ACUERDO

Lo anterior establece el “esqueleto” en el que se guardará el frasco. Para compilarlo y guardarlo, haga lo siguiente:

Construir -> Construir artefacto -> Construir

Intente extraer el archivo .jar de:

📦ProjectName
 ┗ 📂out
   ┗ 📂artifacts
     ┗ 📂ProjectName_jar
        ┗ 📜ProjectName.jar

Referencias:

  • Falla cuando algunas clases en su jar incluido están firmadas con RSA.

    – Asif Shahzad

    7 de marzo de 2012 a las 13:01

  • Este método aún falla, el archivo jar no se ejecuta

    – Samuel Owino

    27 de junio de 2017 a las 10:20


  • Parece que alguien realmente ha trabajado muy duro para que no funcione. Es una pena que nunca funcione. He intentado al menos 50 respuestas diferentes y ninguna funcionó. Y es la misma historia cada vez. Ahora me reservo una semana para enviarlo simplemente como un frasco, ya que todos en nuestra empresa piensan que es un esfuerzo genuino que debe realizarse para producir un frasco de salida.

    – Impresionante

    15 de enero de 2018 a las 9:02

  • Como muchos escribieron antes que yo, esta es una simplificación que a veces funciona. Consulte la respuesta de @zsolt tolvali a continuación. Sería bueno desde la perspectiva de IntelliJ hacer que el proceso de creación de JAR sea una ACTIVIDAD POR DEFECTO al crear un nuevo proyecto, ¡porque muy pocas personas no lo necesitan!

    –Etamar Larón

    14 de marzo de 2018 a las 6:51

  • es casi 2020, casi tenemos un automóvil autónomo y todavía no podemos descubrir cómo crear un jar ejecutable en Intellij

    – 1234

    6 de diciembre de 2019 a las 2:30

Este sigue siendo un problema en 2017, ¡espero que ayude a alguien! Encontré 2 posibilidades para crear jar-s de trabajo en IntelliJ 2017.2

1. Creación de artefactos desde IntelliJ:

  • Ir a la estructura del proyecto:

Menú Archivo

  • Crear un nuevo artefacto:

Crear un nuevo artefacto

  • Seleccione la clase principal y asegúrese de cambiar la carpeta de manifiesto:

ingrese la descripción de la imagen aquí

Tienes que cambiar el directorio de manifiesto:

<project folder>\src\main\java 

reemplace “java” con “recursos”

<project folder>\src\main\resources

Así es como debería verse:

forma correcta para el nuevo manifiesto

  • Luego, elige las dependencias que desea empacar EN su jar, o CERCA de su archivo jar

  • Para construir su artefacto, vaya a construir artefactos y elija “reconstruir”. Creará una carpeta de “salida” con su archivo jar y sus dependencias.

ingrese la descripción de la imagen aquí

2. Usando maven-assembly-plugin

Agregue la sección de compilación al archivo pom

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>ServiceCreate</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <archive>
                        <manifest>
                            <mainClass>com.svt.optimoo.App</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • Cree una nueva configuración de ejecución/depuración:

Cree una nueva configuración de ejecución/depuración:

  • Elija la aplicación:

Elija la aplicación

  • Rellene el formulario
  • Agregue el objetivo maven “ensamblaje: único” después de que la compilación se ejecute por última vez

ingrese la descripción de la imagen aquí

Configuración final

  • Guárdelo, luego ejecute

ingrese la descripción de la imagen aquí

Este procedimiento creará el archivo jar en la carpeta “objetivo”.

Ubicación del archivo JAR

  • ¡cambiar el directorio de manifiesto a src/resources es el punto clave! gracias~

    – toque de fan

    28 de noviembre de 2017 a las 12:28

  • Estuve obteniendo no main manifest attribute adoptando las soluciones anteriores. Nadie ha mencionado cambiar el path to manifest. ¡¡Gracias!!

    – Prometeo

    2 de septiembre de 2018 a las 5:46

  • ¿Qué tal el código fuente en Scala? java no es lo que estoy usando

    – Kiwy

    20 de febrero de 2019 a las 15:52

  • En lugar de recursos, también puede cambiar el directorio al que está arriba de java, por ejemplo ...\src\main\java -> ...\src\main y funciona. Jet Brains realmente debería corregir este valor predeterminado, sigue siendo un problema en 2020.1.4.

    – Keeely

    22 de septiembre de 2020 a las 10:19


  • @Keeely Creo que lo arreglaron. El valor predeterminado es ahora ...\src\main\resourses y si no tiene un archivo de manifiesto allí, se creará un archivo automáticamente.

    –Roy Cohen

    12 dic 2020 a las 21:41

Recientemente tuve este problema y creo que estos pasos son fáciles de seguir si faltan detalles en alguna solución anterior o enlace.

Cómo crear un .jar usando IntelliJ IDEA 14.1.5:

  1. Archivo > Guardar todo.
  2. Ejecute el controlador o la clase con el método principal.
  3. Archivo > Estructura del proyecto.
  4. Seleccione la pestaña “Artefactos”.
  5. Haga clic en el botón verde más cerca de la parte superior de la ventana.
  6. Seleccione JAR del menú desplegable Agregar. Seleccione “Desde módulos con dependencias”
  7. Seleccionar clase principal.
  8. El botón de radio debe estar seleccionando “extraer al JAR de destino”. Presiona OK.
  9. Marque la casilla “Construir sobre la marca”
  10. Presiona Aplicar y Aceptar.
  11. En el menú principal, seleccione el menú desplegable de compilación.
  12. Seleccione la opción construir artefactos.

  • te perdiste algo? Hay una opción sobre el módulo qué debería ser eso. En mi caso, está creando JAR pero JVM por error debido a la seguridad.

    – sonus21

    24/10/2015 a las 21:26

  • Creo que esa lista es todo. Es posible que tenga algo con su configuración de Java que lo detenga debido a la seguridad. ¿Alguien más tiene pensamientos sobre esto?

    – usuario5442490

    11 de diciembre de 2015 a las 1:33

  • Seguí lo mismo y tengo un error: no se pudo encontrar o cargar la clase principal JavaFundamentals.jar al ejecutar este archivo jar. Explicado aquí: stackoverflow.com/questions/40636790/…

    – laggerok19

    16 de noviembre de 2016 a las 20:08


  • ¿Se debe tomar este proceso de 12 pasos cada vez que quiero construir un jar, o IntelliJ recordará estas acciones para que pueda usar un atajo?

    – Andy

    13 de abril de 2018 a las 16:16


Para aquellos que se benefician de las imágenes como yo:

Archivo -> Estructura del proyecto

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Aquí hay 2 ejemplos con el proyecto maven, paso a paso:

Método 1: Construir jar con maven y pom.xml

  1. archivo, nuevo, proyecto, maven
  2. crear un paquete, crear un programa java dentro de ese paquete
    ingrese la descripción de la imagen aquí
  3. en pom.xml, agregue maven-jar-plugin.

        <plugin>
            <!-- Build an executable JAR -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <mainClass>somePackage.sample</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    

la captura de pantalla:
ingrese la descripción de la imagen aquí

4. abra el cuadro del proyecto maven haciendo clic en el icono de búsqueda y escriba maven,
ingrese la descripción de la imagen aquí

  1. haga clic en limpiar, luego haga clic en instalar
    ingrese la descripción de la imagen aquí

  2. su archivo jar aparecerá dentro de la carpeta de destino
    ingrese la descripción de la imagen aquí

  3. prueba tu jar usando java -jar

ingrese la descripción de la imagen aquí

Método 2: compilar jar con maven sin cambiar pom.xml

  1. archivo, nuevo, proyecto, maven
  2. cree un paquete, cree un programa java dentro de ese paquete (igual que arriba)
  3. Archivo -> Estructura del proyecto -> Configuración del proyecto -> Artefactos -> Haga clic en signo más verde -> Frasco -> Desde módulos con dependencias

¡Muy importante!

MANIFEST.MF debe estar en su carpeta de recursos y Main.Class debe hacer referencia a {paquete}-{nombre-de-clase-que-contiene-clase-principal}

ingrese la descripción de la imagen aquí
ingrese la descripción de la imagen aquí

  1. luego haga clic en construir en el menú, construir artefactos, construir

ingrese la descripción de la imagen aquí

  1. encuentra el frasco en la carpeta de salida

ingrese la descripción de la imagen aquí

  1. ejecutarlo 🙂

ingrese la descripción de la imagen aquí

  • esto funciona. ¿Puede explicar por qué MANIFEST.MF debe estar en ese directorio?

    – Ubeogesh

    21 de mayo de 2020 a las 13:38

  • esto me ayuda

    – Devendra Singraul

    2 de junio de 2020 a las 15:53

  • ¡Esto es muy útil! La segunda opción funcionó mejor para mí. Solo una actualización rápida: IntelliJ abre un asistente adicional para crear el archivo de manifiesto. Esto le permitirá crearlo y colocarlo en el lugar correcto sin tener que escribir nada.

    – Microbob

    2 de julio de 2020 a las 4:30

  • eso es muy util

    – ronito

    27 de mayo de 2021 a las 18:19

Cuando uso esta solución, aparece este error:

java -jar xxxxx.jar

sin atributo de manifiesto principal, en xxxxx.jar

y la solución es:

Tienes que cambiar el directorio de manifiesto:

<project folder>\src\main\java 

cambiar java a recursos

<project folder>\src\main\resources

  • esto funciona. ¿Puede explicar por qué MANIFEST.MF debe estar en ese directorio?

    – Ubeogesh

    21 de mayo de 2020 a las 13:38

  • esto me ayuda

    – Devendra Singraul

    2 de junio de 2020 a las 15:53

  • ¡Esto es muy útil! La segunda opción funcionó mejor para mí. Solo una actualización rápida: IntelliJ abre un asistente adicional para crear el archivo de manifiesto. Esto le permitirá crearlo y colocarlo en el lugar correcto sin tener que escribir nada.

    – Microbob

    2 de julio de 2020 a las 4:30

  • eso es muy util

    – ronito

    27 de mayo de 2021 a las 18:19

Probablemente sea un poco tarde, pero logré resolverlo de esta manera -> abrir con winrar y eliminar ECLIPSEF.RSA y ECLIPSEF.SF en la carpeta META-INF, además poner “Main-class: main_class_name” (sin “.class” ) en MANIFIESTO.MF. Asegúrate de haber presionado “Enter” dos veces después de la última línea, de lo contrario no funcionará.

  • Para dependencias firmadas, consulte esta respuesta: stackoverflow.com/questions/41746177/…

    usuario2241537

    16 de mayo de 2017 a las 6:12

  • Que locura de tema. ¿Alguna idea de por qué sucede esto o cómo solucionarlo? Esto se siente raro

    – Andrés No

    21 de abril de 2018 a las 22:42

¿Ha sido útil esta solución?