Come costruire correttamente i vasetti da IntelliJ?


519

Ho un progetto che contiene un singolo modulo e alcune dipendenze. Vorrei creare un vaso, in una directory separata, che contiene il modulo compilato. Inoltre, vorrei avere le dipendenze presenti accanto al mio modulo.

Indipendentemente da come distorcere il processo "build jar" di IntelliJ, l'output del mio modulo appare vuoto (oltre a un file META-INF).

Risposte:


603

Ecco come costruire un vaso con IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

File-> Project Structure-> Project Settings-> Artifacts-> Fare clic su green plus sign-> Jar->From modules with dependencies...

Quanto sopra imposta lo "scheletro" su dove verrà salvato il vaso. Per costruirlo e salvarlo effettivamente, procedi come segue:

Estrai sul Jar di destinazione

ok

Build | Costruisci artefatto | Costruire

Prova a estrarre il file .jar da

ProjectName | fuori | artefatti | ProjectName_jar | ProjectName.jar


9
Non riesce quando alcune classi nel vaso incluso sono firmate con RSA.
Asif Shahzad

1
@AsifShahzad vede questa risposta per creare file jar con dipendenze firmate: stackoverflow.com/questions/41746177/… .

5
Questo metodo non riesce ancora, il file jar non viene eseguito
samuel owino,

6
Sembra che qualcuno abbia davvero lavorato molto duramente per non farlo funzionare. È un peccato che non funzioni mai. Ho provato almeno 50 risposte diverse e nessuna di queste ha funzionato. Ed è la stessa storia ogni volta. Ora mi riservo una settimana solo per produrlo come un vaso poiché tutti nella nostra azienda pensano che sia uno sforzo genuino che deve essere impiegato nella produzione di un vaso di raccolta.
Fantastico

2
Come molti hanno scritto prima di me, questa è una semplificazione che a volte funziona. Di seguito, vedi la risposta di @zsolt tolvali. Sarebbe positivo dal punto di vista di IntelliJ rendere il processo di creazione JAR un'ATTIVITÀ PREDEFINITA quando si crea un nuovo progetto, perché pochissime persone non ne hanno bisogno!
Etamar Laron,

256

Questo è ancora un problema nel 2017, spero che possa aiutare qualcuno là fuori! Ho trovato 2 possibilità per creare jar-s funzionanti in IntelliJ 2017.2

1. Creazione di artefatto da IntelliJ:

  • Vai alla struttura del progetto:

Menu File

  • Crea un nuovo artefatto:

Crea un nuovo artefatto

  • Seleziona la classe principale e assicurati di cambiare la cartella manifest:

inserisci qui la descrizione dell'immagine

Devi cambiare la directory manifest:

<project folder>\src\main\java 

sostituisci "java" con "risorse"

<project folder>\src\main\resources

Ecco come dovrebbe apparire:

modo corretto per nuovo manifest

  • Quindi si scelgono le dipendenze da ciò che si desidera inserire nel proprio vaso o vicino al file del vaso

  • Per costruire il tuo artefatto vai a costruire artefatti e scegli "ricostruisci". Creerà una cartella "out" con il file jar e le sue dipendenze.

inserisci qui la descrizione dell'immagine

2. Utilizzo di maven-assembly-plugin

Aggiungi la sezione build al file 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>
  • Crea una nuova configurazione di esecuzione / debug:

Crea una nuova configurazione di esecuzione / debug:

  • Scegli applicazione:

Scegli l'applicazione

  • Compila il modulo
  • Aggiungi l'obiettivo "assembly: single" maven dopo che la build è stata eseguita per ultima

inserisci qui la descrizione dell'immagine

Installazione finale

  • Salvalo, quindi esegui

inserisci qui la descrizione dell'immagine

Questa procedura creerà il file jar nella cartella "target"

Posizione del file JAR


7
cambiare la directory manifest in src / resources è il punto chiave !!! grazie ~
fantouch,

3
Questo percorso MANIFEST è il percorso più critico, grazie a @Zsolt Tolvaly
fruqi

2
Stavo no main manifest attributeadottando le soluzioni sopra. Nessuno ha menzionato la modifica di path to manifest. Thnx !!
Prometeo

1
questa dovrebbe essere la risposta migliore. Grazie!
Giorgos Lamprakis,

che ne dici del codice sorgente in scala? java non è quello che sto usando
Kiwy,

135

Di recente ho avuto questo problema e penso che questi passaggi siano facili da seguire se in qualche soluzione precedente o collegamento mancano i dettagli.

Come creare un .jarIntelliJ IDEA 14.1.5 usando:

  1. File> Salva tutto.
  2. Esegui il driver o la classe con il metodo principale.
  3. File> Struttura del progetto.
  4. Seleziona la scheda "Manufatti".
  5. Fai clic sul pulsante più verde nella parte superiore della finestra.
  6. Seleziona JAR dal menu a discesa Aggiungi. Seleziona "Dai moduli con dipendenze"
  7. Seleziona la classe principale.
  8. Il pulsante di opzione dovrebbe selezionare "Estrai nel JAR di destinazione". Premere OK.
  9. Seleziona la casella "Build on make"
  10. Premere applica e OK.
  11. Dal menu principale, seleziona il menu a discesa della build.
  12. Seleziona l'opzione crea artefatti.

1
ti sei perso qualcosa? C'è un'opzione sul modulo che dovrebbe essere quella. Nel mio caso sta creando JAR ma JVM attraverso errori dovuti alla sicurezza.
sonus21

penso che l'elenco sia tutto. Potresti avere qualcosa con le tue impostazioni Java che lo fermano a causa della sicurezza. Qualcun altro ha pensato su questo?
user5442490 l'

Seguito lo stesso e ho errore: Impossibile trovare o caricare la classe principale JavaFundamentals.jar durante l'esecuzione di questo file jar. Ha spiegato qui: stackoverflow.com/questions/40636790/...
laggerok19

Questo processo in 12 passaggi deve essere eseguito ogni volta che voglio creare un vaso o IntelliJ ricorderà queste azioni in modo da poter utilizzare un collegamento ad esso?
Andy,

31

Per quelli che traggono beneficio dalle immagini come faccio io:

File -> Project Structure

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


4
@samuelowino non apprezzo che tu l'abbia detto. Spiega cosa "non funziona affatto".
Crt,

1
Hey @Crt Io non stavo controllando il file jar destra, a quanto pare, Inteliji prodotto due file jar su directory diverse, scuse, il mio male, le tue opere soluzione, grazie
Samuel Owino

15

Ecco 2 esempi con il progetto Maven, passo dopo passo:

Metodo 1: costruisci un vaso con maven e pom.xml

  1. File, nuovo, progetto, maven
  2. crea un pacchetto, crea un programma java all'interno di quel pacchetto inserisci qui la descrizione dell'immagine
  3. su pom.xml, aggiungi 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>

cattura schermo: inserisci qui la descrizione dell'immagine 4. apri la casella del progetto maven facendo clic sull'icona di ricerca e digita maven, inserisci qui la descrizione dell'immagine

  1. fai clic su clean, quindi fai clic su installa inserisci qui la descrizione dell'immagine

  2. il file jar verrà visualizzato nella cartella di destinazione inserisci qui la descrizione dell'immagine

  3. prova il tuo vaso usando java -jar

inserisci qui la descrizione dell'immagine

Metodo 2: costruisci un vaso con Maven senza cambio pom.xml

  1. File, nuovo, progetto, maven
  2. crea un pacchetto, crea un programma java all'interno di quel pacchetto (come sopra)
  3. File-> Project Structure-> Project Settings-> Artifacts-> Fare clic su green plus sign-> Jar->From modules with dependencies

Molto importante!

MANIFEST.MF deve trovarsi nella cartella delle risorse e Main.Class deve fare riferimento a {pacchetto} - {nome-classe-che-contiene-classe-principale}

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

  1. quindi fai clic su Crea dal menu, crea artefatti, crea

inserisci qui la descrizione dell'immagine

  1. trova il barattolo nella cartella out

inserisci qui la descrizione dell'immagine

  1. eseguirlo :)

inserisci qui la descrizione dell'immagine


questo funziona. Puoi spiegare perché MANIFEST.MF deve trovarsi in quella directory?
Ubeogesh,

Questo mi aiuta
Devendra Singraul il

5

Probabilmente è un po 'tardi, ma sono riuscito a risolverlo in questo modo -> apri con winrar ed elimina ECLIPSEF.RSA ed ECLIPSEF.SF nella cartella META-INF, inoltre metti "Main-class: main_class_name" (senza ".class" ) in MANIFEST.MF. Assicurati di aver premuto "Invio" due volte dopo l'ultima riga, altrimenti non funzionerà.


Per le dipendenze firmati, si prega di dare un'occhiata a questa risposta: stackoverflow.com/questions/41746177/...

Che problema folle. Qualche idea sul perché questo accada o su come risolvere? Sembra strano
Andrew No

5

Quando utilizzo queste soluzioni, viene visualizzato questo errore:

java -jar xxxxx.jar

nessun attributo manifest principale, in xxxxx.jar

e la soluzione è :

Devi cambiare la directory manifest:

<project folder>\src\main\java 

cambia java in risorse

<project folder>\src\main\resources

Finalmente grazie per il suggerimento!
rendon

@rendon Buona fortuna, wow!
Saeed,

Perfetto !. Funziona bene
jafarmlp il

2

Stavo cercando di creare un vaso da un'app Kotlin multi-modulo e stavo ottenendo il noto errore "nessun attributo manifest principale". Anche la creazione della directory manifest in src/main/resourcesnon ha funzionato.

Invece, funziona durante la creazione in srcdiretta: src/META-INF/MANIFEST.MF.

inserisci qui la descrizione dell'immagine


Ciao, grazie sta funzionando bene. Ma ora ho un nuovo errore che non trova le risorse "java.desktop / javax.swing.ImageIcon java.lang.NullPointerException"
Shivam Mathur,

2

inserisci qui la descrizione dell'immagine

Come dice la gente sopra, ma devo notare un punto. Devi selezionare la casella di controllo:

Includi nella compilazione del progetto


1

Idea 8.1.3

Jar è ok, dato che c'è un output compilato nella directory 'output' (project / out / production //)

Immagino che devi eseguire "make" prima di costruire il vaso

per le dipendenze basta selezionare "mostra libreria" e scegliere ciò che si desidera.


1

Con Maven puoi usare questo plugin:

 <build>
    <plugins>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>[path you class main]</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase> 
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

0

Potresti dare un'occhiata a Maven ( http://maven.apache.org ). Puoi usarlo come processo di compilazione principale per la tua applicazione o semplicemente per eseguire determinate attività attraverso la finestra di dialogo Modifica configurazioni. Il processo di creazione di un JAR di un modulo all'interno di Maven è piuttosto banale, se si desidera che includa tutte le dipendenze in un JAR auto-eseguibile che è anche banale.

Se non hai mai usato Maven prima, allora vuoi leggere Better Builds With Maven .


8
Maven è ovviamente sovraccarico per compiti semplici come la creazione di jar. Forse Ant ma non di sicuro.
Juriy,

Link is dead (ott 2014)
KathyA.

1
@KathyA. Grazie - aggiornato per utilizzare i consigli del team Maven.
Gary Rowe,

5
Se è così banale, perché non includerlo nella tua risposta?
nuzzolilo,

1
Perché desidero che il lettore visiti il ​​sito e inizi il processo di apprendimento.
Gary Rowe,

0

Se si utilizzano librerie di terze parti con il proprio progetto o se si riscontrano problemi con la creazione corretta del file MANIFEST.MF, possono verificarsi conflitti durante l'esecuzione dei file JAR generati utilizzando

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

metodo sopra menzionato.

Invece ti consiglio di creare un JAR vuoto e aggiungere manualmente tutti gli altri elementi alla radice di output. Un meraviglioso articolo di blog per questo metodo può essere trovato qui: http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ Ho provato i passaggi menzionati lì e tutto ha funzionato bene per me!


Grazie, questo mi ha aiutato! Sembra che ci sia un bug in Intellij in cui il manifest del progetto viene sovrascritto nel JAR da un manifest predefinito se si seleziona "JAR" come tipo di artefatto anziché "Altro".
rosso

0

Alcune delle altre risposte sono inutili perché non appena si reimporta il progetto IntelliJ IDEA dal progetto maven, tutte le modifiche andranno perse.

La costruzione del vaso deve essere attivata da una configurazione di esecuzione / debug, non dalle impostazioni del progetto.

Jetbrains ha una bella descrizione di come puoi farlo qui:

https://www.jetbrains.com/help/idea/maven.html

Scorri verso il basso fino alla sezione chiamata "Configurazione dei trigger per obiettivi Maven".

(L'unico svantaggio della loro descrizione è che i loro screenshot sono nella combinazione di colori nero su bianco predefinita invece del tema super fantastico di Darcula. Ugh!)

Quindi, fondamentalmente, quello che fai è aprire il pannello "Progetti Maven", trovare il progetto di interesse, (nel tuo caso, il progetto che costruisce il tuo vaso,) sotto di esso trovi l'obiettivo di maven che vuoi eseguire , (di solito l'obiettivo "pacchetto" crea barattoli), si apre il menu contestuale su di esso (fare clic con il pulsante destro del mouse su un computer Windows) e sarà disponibile l'opzione "Esegui prima di eseguire / debug ..." seleziona e ti prenderà per mano da lì. Davvero facile.


0

Nel caso in cui si stia tentando di costruire un vaso con kotlin, è necessario creare una src/main/javacartella e utilizzare questa cartella come posizione per la cartella META-INF.


0

Ecco la risposta ufficiale della Guida di IntelliJ IDEA 2018.3 . Ho provato e ha funzionato.

Per creare un file JAR da un modulo;

  1. Nel menu principale, scegli Crea | Costruisci artefatto.

  2. Dall'elenco a discesa, selezionare l'artefatto desiderato del tipo JAR. L'elenco mostra tutti gli artefatti configurati per il progetto corrente. Per creare tutti gli artefatti configurati, scegli l'opzione Crea tutti gli artefatti.


0

Il mio problema era questo: ho usato Intellij IDEA (ho provato diverse versioni) + Gradle. Quando ho compilato il progetto e costruito il vaso artifacf, come indicato nelle risposte precedenti, ho ricevuto un errore: "nessun manifest principale attrubute ..."

Questa soluzione ha funzionato per me (ringraziamenti speciali a Thilina Ashen Gamage (vedi sopra) per il suggerimento):

Estratto: se si utilizzano librerie esterne e si crea un progetto tramite Impostazioni progetto - Manufatti - Aggiungi (+) - Vaso - Dai moduli con dipendenze , probabilmente a causa di un bug del programma la cartella META-INF con il file MANIFEST_MF non include nel vaso. Per evitarlo, creare un file jar VUOTO .

Impostazioni progetto - Manufatti - Aggiungi (+) - Barattolo - VASO VUOTO . La cartella META-INF verrà aggiunta alla cartella delle risorse . Quindi seleziona la tua classe principale. Vedrai la seguente struttura del vaso: notare la presenza di una cartella META-INF Nota la presenza di una cartella META-INF Quindi puoi costruire il tuo progetto e costruire artefatti. Questa soluzione ha funzionato anche per le applicazioni javaFX.


-1

Se stai lavorando al progetto spring / mvn puoi usare questo comando:

mvn package -DskipTests

Il file jar verrà salvato sulla directory di destinazione.


-3

Ant e Maven sono ampiamente utilizzati. Preferisco Ant, sento che è più leggero e tu lo sviluppatore hai più controllo. Alcuni suggeriscono che questo è il suo aspetto negativo :-)


3
Questo non fa nulla per spiegare perché si sta verificando l'errore.
baordog,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.