Estoy tratando de empaquetar un proyecto usando las bibliotecas OptaPlanner 6.0.1 en un .jar a través del artefacto jar de IntelliJ IDEA pero en lugar de mi manifest.mf que contiene el estándar
Manifest-Version: 1.0
Main-Class: a.b.c.app
el jar usa el que se proporciona en ecj-3.7.2.jar, una de las bibliotecas de soporte de OptaPlanner:
Manifest-Version: 1.0
Build-Jdk: 1.6.0_26
Built-By: ibrandt
Created-By: Apache Maven
Archiver-Version: Plexus Archiver
Debido a esto, "no main manifest attribute, in appname.jar"
ocurre un error al intentar ejecutar la aplicación. Si reemplazo manualmente el manifiesto en el archivo .jar con el mío, todo funciona correctamente. ¿Hay algo que pueda hacer para solucionar este problema?
Mantengo las bibliotecas en un directorio / lib separado y se agregaron a la raíz del artefacto jar como Directorio extraído, IntelliJ IDEA es v13.0.1.
java
intellij-idea
optaplanner
grudolf
fuente
fuente
Respuestas:
Yo tuve el mismo problema.
Asegúrese de que su MANIFEST.MF esté en:
NO
fuente
Arreglar:
fuente
Como se señaló en el comentario de @ grudolf en una de las otras respuestas, una forma de hacer esto (y la única que funcionó para mí en un proyecto Gradle importado) es crear un frasco vacío de la siguiente manera:
ACTUALIZAR:
Este es definitivamente un error en Idea. Esta respuesta vinculada funciona de manera confiable cuando hay directorios extraídos. En esencia, encuentra su .idea / JARNAME.xml, agregue el siguiente elemento en la parte superior del
<root>
elemento para su jar. Cualquier elemento extraído por encima de su nueva copia de archivo que contenga un manifiesto aplastará su nuevo manifiesto.fuente
Si desea especificar la clase principal, debe agregar este complemento a pom.xml:
fuente
Tuve un problema similar.
El problema estaba en el archivo pom.xml.
No sé por qué funciona este código en eclipse, pero no en IntelliJ
Esto es correcto.
Manifest.mf funcionó !!!
Espero que esto ayude.
fuente
Hay varias formas de generar archivos jar ejecutables. Usar la función GUI de IntelliJ es una buena manera. Otra forma es usar Maven (o de manera similar en gradle, buildr, etc.) que es compatible con el servidor de compilación:
Es más o menos copiable y pegable de los ejemplos de optaplanner maven build:
fuente
Para no tener ningún problema como Manifest, debe tener un directorio llamado "META-INF" en el directorio "src". Entonces, créelo y ponga un archivo llamado "MANIFEST.MF" con el siguiente contenido:
¡No olvide reemplazar el nombre del paquete que contiene la clase Main arriba!
fuente