J'utilise Maven dans mon application autonome, et je veux empaqueter toutes les dépendances dans mon fichier JAR à l'intérieur d'un dossier de bibliothèque, comme mentionné dans l'une des réponses ici :
Comment créer un JAR exécutable avec des dépendances à l'aide de Maven ?
Je veux que mon fichier JAR final ait un dossier de bibliothèque contenant les dépendances sous forme de fichiers JAR, et non pas comme ce que le fichier maven-shade-plugin
qui place les dépendances sous forme de dossiers, comme la hiérarchie Maven dans le dossier .m2.
En fait, la configuration actuelle fait ce que je veux, mais j'ai un problème avec le chargement des fichiers JAR lorsque je lance l'application. Je n'arrive pas à charger les classes.
Voici ma configuration :
<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>
Le projet s'exécute correctement à partir d'Eclipse, et les fichiers JAR sont placés dans le dossier de la bibliothèque à l'intérieur de mon fichier JAR final comme je le souhaite, mais lorsque je lance le fichier JAR final à partir du dossier cible, j'obtiens toujours les résultats suivants 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.
Comment puis-je corriger cette exception ?