Creare Artifact JAR con intellij IDEA

di il
2 risposte

Creare Artifact JAR con intellij IDEA

Ciao a tutti, sto iniziando a fare quache prova con java. Uso Intellij IDEA come ide. Sto realizzando un programmino che lavora con IMAP grazie a Javamail api.

Ho creato in IDEA un nuovo progetto di tipo maven e ho impostato le dipendenze così:
    <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.3</version>
        </dependency>
    </dependencies>
Poi ho scritto un po' di codice per listare le cartelle e nella console di IDEA tutto funziona.

Ora vorrei avere un jar per eseguire lo stesso programma nella shell del sistema operativo ma proprio non riesco.

Da IDEA ho capito che devo andare in File -> Project Structure -> Project Settings -> Artifacts -> e qui ho aggiunti un nuovo JAR -> From module with dependencies.

Ho indicato la main class, impostato "JAR files from librarie -> Extract to the target JAR" e indicato la directory del manifest (/ImapClient/src/main/java/META-INF/MANIFEST.MF)

Questo è ciò che ottengo


è stato creato il manifest che conteiene

Manifest-Version: 1.0
Main-Class: it.name.ImapClient
Faccio il build del progetto, mi crea il .jar ma poi:

java -jar ImapClient.jar 
nessun attributo manifest principale in ImapClient.jar
Che cosa sbaglio?

Grazie

2 Risposte

  • Re: Creare Artifact JAR con intellij IDEA

    matiux ha scritto:


    Ora vorrei avere un jar per eseguire lo stesso programma nella shell del sistema operativo ma proprio non riesco.
    Non conosco e non uso Intellij IDEA, quindi non saprei guidarti a livello pratico su cosa cliccare, aprire, impostare, ecc..

    Ma ti posso dire questo: con Maven, se vuoi arrivare ad avere un jar ben fatto e intendo dire con il "manifest" che contiene almeno gli attributi Main-Class e Class-Path corretti e utili per il lancio della applicazione dal jar, allora devi sfruttare dei plugin Maven appositi.
    Se vuoi vedere degli esempi validi, puoi vedere nei miei Java Example gli esempi relativi ad Apache PDFBox. Questi che ho fatto sono basati su Maven, usano dei plugin standard configurati appropriatamente per arrivare ad avere un jar ben composto e una cartella "lib" (referenziata dal jar) contenente tutte le dipendenze.

    Poi come "scatenare" l'impacchettamento da IDEA, è ovviamente un altro discorso.
  • Re: Creare Artifact JAR con intellij IDEA

    Ho risolto modificando il file maven come segue:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>it.domain</groupId>
        <artifactId>imap-client</artifactId>
        <version>0.0.1-beta</version>
    
        <dependencies>
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>javax.mail-api</artifactId>
                <version>1.5.3</version>
            </dependency>
            <dependency>
                <groupId>com.sun.mail</groupId>
                <artifactId>javax.mail</artifactId>
                <version>1.5.3</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>it.domain.ImapClient</mainClass>
                            </manifest>
                            <manifestEntries>
                                <Class-Path>. conf</Class-Path>
                            </manifestEntries>
                        </archive>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>attached</goal>
                            </goals>
                            <phase>package</phase>
                            <configuration>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <archive>
                                    <manifest>
                                        <mainClass>it.domain.ImapClient</mainClass>
                                    </manifest>
                                </archive>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
    
    
        </build>
    
    </project>
    
    questo funziona sia facendo mvn package da shell che con il plugin maven per idea
Devi accedere o registrarti per scrivere nel forum
2 risposte