Da un progetto Java Maven ad un jar "eseguibile" che comprende tutto quanto necessario alla sua esecuzione.


Soluzione all'eccezione sguente:
Exception in thread "main" java.lang.NoClassDefFoundError.

Questa exception si verifica quando mancano o non sono reperibili tramite il calsspath i jar necessari all'esecuzione.

Per lo scopo di cui all'oggetto sono necessari due plugin di MAVEN da aggiugnere nel pom.xml nell'elemento "plugins":

Il primo serve a riportare nel percorso indicato nell'element "outputDirectory" tutti i jar necessari:

<plugin>
   <!-- Each needed file in the lib folder. -->
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
      <execution>
         <id>copy-dependencies</id>
         <phase>prepare-package</phase>
         <goals>
            <goal>copy-dependencies</goal>
         </goals>
         <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                          <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
         </configuration>
      </execution>
    </executions>
</plugin>


Il secondo invece è necessario per creare un jar eseguibile:
<plugin>
<!-- Build an executable JAR -->
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <version>3.0.2</version>
  <configuration>
    <archive>
        <manifest>
           <addClasspath>true</addClasspath>
           <classpathPrefix>lib/</classpathPrefix>
           <mainClass>package.e.classe.del.main</mainClass>
        </manifest>
    </archive>
  </configuration>

</plugin>

Eseguire quindi il "clean and build" ed otterrete un folder contenente anche il jar che potrete, ora, eseguire con il classico "java -jar nomeDelJar.jar"

Commenti

Post popolari in questo blog

Log4j - configurazione ed utilizzo

Git: branch e merge, comandi essenziali