Wrong Manifest.mf in IntelliJ IDEA creato .jar

Sto provando a confezionare un progetto usando le librerie OptaPlanner 6.0.1 in un .jar attraverso l’artefatto di jar di IntelliJ IDEA ma invece del mio manifest.mf che contiene lo standard

Manifest-Version: 1.0 Main-Class: abcapp 

il jar utilizza quello fornito in ecj-3.7.2.jar, una delle librerie di supporto di OptaPlanner:

 Manifest-Version: 1.0 Build-Jdk: 1.6.0_26 Built-By: ibrandt Created-By: Apache Maven Archiver-Version: Plexus Archiver 

Per questo "no main manifest attribute, in appname.jar" , un errore "no main manifest attribute, in appname.jar" verifica quando si tenta di eseguire l’app. Se cambio manualmente il manifest nel file .jar con il mio tutto funziona correttamente. C’è qualcosa che posso fare per risolvere questo problema?

Conservo le librerie in una directory separata / lib e sono state aggiunte alla radice del file jar come Extracted Directory, IntelliJ IDEA è v13.0.1.

Ho avuto lo stesso problema.

Assicurati che il tuo MANIFEST.MF sia in:

 src/main/resources/META_INF/ 

NON

 src/main/java/META_INF/ 

Aggiustare:

  1. File> Struttura del progetto
  2. Sotto Impostazioni progetto a sinistra, seleziona “Manufatti”
  3. Trova la definizione JAR Nel riquadro centrale e selezionalo
  4. Nel riquadro sinistro della scheda “Layout di output” trova il file jar nell’elenco e selezionalo
  5. In basso, fai clic sul pulsante “Usa manifesto esistente” e seleziona il file manifest che si trova nella sorgente del progetto.
  6. Fare clic su OK ed eseguire la build

Come notato nel commento di @grudolf in una delle altre risposte, un modo per farlo (e l’unico che ha funzionato per me in un progetto Gradle importato) è creare un jar vuoto come segue:

  • Struttura del progetto -> Artefatti -> + Vaso -> Vuoto
  • Il riquadro centrale ora presenta Crea manifesto e utilizza i pulsanti Manifest esistente. Usa uno di questi.
  • Ho avuto difficoltà se ho estratto le librerie dipendenti con i loro manifesti nella radice di output, sembra che sovrascrivano a intermittenza il nuovo manifest creato manualmente. Pasticciare con l’ordine delle operazioni sembrava farlo funzionare.

AGGIORNARE:

Questo è sicuramente un bug in Idea. Questa risposta collegata funziona in modo affidabile quando ci sono le directory estratte. In sostanza, trovi il tuo .idea / JARNAME.xml, aggiungi aggiungi il seguente elemento in cima all’elemento per il tuo jar. Qualsiasi elemento estratto sopra la nuova copia del file che contiene un manifest comprimerà il tuo nuovo manifest.

     

Se vuoi specificare la Main Class, devi aggiungere questo plugin a pom.xml:

  org.apache.maven.plugins maven-jar-plugin 2.6    Form     

Ho avuto un problema simile.

Il problema era nel file pom.xml.

   one.jar, two.rar, other.jar    

Non so per quale motivo questo codice funzioni in Eclipse, ma non in IntelliJ

Questo è corretto.

   one.jar, two.rar, other.jar   

Manifest.mf ha funzionato !!!

Spero che aiuti.

Esistono diversi modi per generare giare eseguibili. L’utilizzo della funzionalità GUI di IntelliJ è un buon modo. Un altro modo è usare Maven (o in modo simile a gradle, buildr, ecc.) Che è compatibile con build-server:

È più o meno copiabile con gli esempi optaplanner di costruzione di maven:

  1. Il jar dell’utente finale (optaplanner-examples – *. Jar) deve includere il classpath delle sue dipendenze nel manifest .
  2. Lo script sh e bat deve quindi eseguire quel jar con conseguentemente.

Per non avere problemi come Manifest, dovresti avere una directory chiamata “META-INF” nella directory “src”. Quindi, creala e metti un file chiamato “MANIFEST.MF” con il seguente contenuto:

 Manifest-Version: 1.0 Main-Class: .Main 

Non dimenticare di sostituire il nome del pacchetto contenente la class Main sopra!