2013-06-10 11 views
12

Sto usando IntelliJ IDEA 12.1.3. Ho un modulo e sto provando a convertirlo in un vaso secondo i punti indicati here. Ho creato il file jar e ho spostato il file jar su D: /. Se provo a fare funzionare questo barattolo ottengo il seguente messaggio:Creare un barattolo esportabile in IntelliJ IDEA

è riuscito a caricare l'attributo manifest Main-Class dal vaso

Se l'eseguo usando java -classpath jar com.code.TestCase funziona perfettamente.

Perché succede? Ho creato il vaso usando IntelliJ IDEA. In quel barattolo ha tutto il codice per tutte le librerie esterne che ho aggiunto.

Nel src file manifesto:

Manifest-Version: 1.0 
Main-Class: com.code.TestCase 

ma il contenuto del file manifest del vaso è:

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

Name: org.apache.log4j 
Implementation-Vendor: "Apache Software Foundation" 
Implementation-Title: log4j 
Implementation-Version: 1.2.15 

Perché Main-Class non aggiunta nel file jar MANIFEST.MF, ma ha Main-Class in src?

+1

Idea Intellij * 1 *? o intendevi forse 11, 12 o 13 ... – vikingsteve

+1

Puoi condividere la tua classe 'com.code.TestCase'? Dovrebbe avere il metodo principale –

+0

@vikingsteve È 12.1.3 – muthu

risposta

0

Una delle regole importanti è che il file Manifest deve terminare con una nuova riga o un carattere di ritorno a capo. Se non è lì, quindi aggiungere ora.

+1

ma è stato creato da intellij IDEA – muthu

+1

Il manifest predefinito creato da IDEA 12.1.3 ha una riga vuota sul fine. – vikingsteve

42

ho sperimentato lo stesso problema e trovato una soluzione e/o bug nel modo in cui Intellij auto popola il percorso per il manifesto.

IntelliJ UI

Durante la creazione di un manufatto per creare file jar, IntelliJ auto popola il percorso in cui si trova il manifesto corrente.

Ad esempio, dopo aver scelto Main-Class nella pagina di creazione degli artefatti, Intellij aggiungerà automaticamente il seguente percorso \ src \ java \ META-INF \ MANIFEST.MF. Per qualche motivo, il comando build non prende mai il file MANIFEST.MF menzionato. Crea uno da zero senza la definizione Main-Class che risulta in "Impossibile caricare Main-Class"

Se si utilizza l'interfaccia utente IntelliJ per creare artefatti jar; rimosso il percorso di popolamento automatico cambiandolo in /$PROJECT_DIR/src/ e fare clic su OK.

Esempio di come si presenta di default:

default intellij jar artifact settings

Ora, questo è quello che dovrebbe essere simile dopo la modifica:

fixed intellij artifact settings

FIX MANUALE PER ENTRARE MANIFESTO CORRETTO .MF FILE

Sulla I progetto ntelliJ, apri .idea \ manufatti \ _jar.xml

assicurarsi che contenga

<element id="directory" name="META-INF"> 
    <element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" /> 
    </element> 

Potrebbe essere necessario ricaricare IntelliJ una volta che si esegue questa operazione in modo che riprende le modifiche al file XML

Per me è successo su progetti Maven dove esiste una struttura diversa (es. src/main/java/..).

Sto usando OSX 10.9.2 con IntelliJ versione 12.1.6

Speranza che aiuta.

+0

Grazie per aver postato questo. Stavo cercando una soluzione e cercando di capire perché non ha funzionato – plosco

+0

La migliore risposta a questo problema! – MSD561

+0

Grazie BRO) Questo è sicuramente il tempo risparmiatore –