Sto usando Maven nella mia applicazione standalone e voglio impacchettare tutte le dipendenze nel mio file JAR all'interno di una cartella di libreria, come menzionato in una delle risposte qui:
Come posso creare un JAR eseguibile con dipendenze utilizzando Maven?
Voglio che il mio file JAR finale abbia una cartella di libreria che contenga le dipendenze come file JAR, non come ciò maven-shade-plugin
che mette le dipendenze sotto forma di cartelle come la gerarchia di Maven nella cartella .m2.
Bene, in realtà la configurazione corrente fa quello che voglio, ma ho un problema con il caricamento dei file JAR durante l'esecuzione dell'applicazione. Non riesco a caricare le classi.
Ecco la mia configurazione:
<plugins>
<plugin>
<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}/classes/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.myapp.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
Il progetto funziona correttamente da Eclipse ei file JAR vengono inseriti nella cartella della libreria all'interno del mio file JAR finale come desidero, ma quando eseguo il file JAR finale dalla cartella di destinazione ottengo sempre ClassNotFoundException
:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: com.myapp.MainClass. Program will exit.
Come posso correggere questa eccezione?
com.myapp.MainClass
si stia cercando la classe principale , no com.tastycafe.MainClass
.