Comment puis-je mettre tous les requis des fichiers JAR dans un dossier de la bibliothèque de l'intérieur du dernier fichier JAR avec Maven?

Je suis à l'aide de Maven dans mon application autonome, et je veux le package de toutes les dépendances dans mon fichier JAR dans un dossier de la bibliothèque, comme mentionné dans une des réponses ici:

Comment puis-je créer un fichier exécutable JAR avec des dépendances à l'aide de Maven?

Je veux mon dernier fichier JAR pour avoir un dossier de bibliothèque qui contient les dépendances dans des fichiers JAR, pas comme ce que les maven-shade-plugin qui met les dépendances sous la forme de dossiers comme le Maven hiérarchie dans l' .m2 dossier.

Bien, en fait, la configuration actuelle est ce que je veux, mais j'ai un problème avec le chargement des fichiers JAR lors de l'exécution de l'application. Je ne peux 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 fonctionne bien à partir d'Eclipse, et les fichiers JAR sont mis dans le dossier de la bibliothèque de l'intérieur de mon dernier fichier JAR que je veux, mais lors de l'exécution de la dernière fichier JAR à partir du dossier cible, je reçois toujours 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?

  • qui commande que vous utilisez pour exécuter le pot? probablement vous préférerez peut-être maven plugin exec?
  • Est le message de l'exception de date par rapport à la POM fichier? Il semble que la classe principale com.myapp.MainClass est recherché, pas com.tastycafe.MainClass.
  • Jones, copier coller le problème, j'ai édité la question
  • Notez que si vous voulez des pots à l'intérieur du pot, puis la norme chargeurs de classes en Java ne peut pas les comprendre.
  • Comment faire placer les dépendances maven dans un dossier lib, mais en dehors du BOCAL?