Maven: NoClassDefFoundError dans le fil de discussion principal
Je suis actuellement en train de construire un peu de Apache-Mina Serveur d'application. Je suis à l'aide de Maven pour construire.
Lorsque j'essaie d'exécuter le pot, j'obtiens l'erreur suivante:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mina/filter/codec/ProtocolCodecFactory
Caused by: java.lang.ClassNotFoundException: org.apache.mina.filter.codec.Protoc olCodecFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: de.fr1zle.gpsserver.GpsServer. Program will exit.
Cours d'exécution dans eclipse n'est pas un problème.
C'est ce que l'généré MANIFESTE ressemble:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: fr1zle
Build-Jdk: 1.6.0_23
Main-Class: de.fr1zle.gpsserver.GpsServer
Class-Path: commons-lang-2.1.jar plexus-utils-1.1.jar junit-4.8.2.jar
log4j-1.2.14.jar slf4j-jdk14-1.5.11.jar slf4j-api-1.5.11.jar antlr-2.
7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar hibernate-commons
-annotations-3.2.0.Final.jar hibernate-jpa-2.0-api-1.0.0.Final.jar jt
a-1.1.jar hibernate-annotations-3.5.6-Final.jar hibernate-core-3.5.6-
Final.jar mysql-connector-java-5.1.15.jar mina-core-2.0.3.jar
Et c'est (une partie de) mon pom.xml:
<groupId>de.fr1zle.gpsserver</groupId>
<artifactId>GPSServer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>GPSServer</name>
<packaging>jar</packaging>
<description>Tracks location of GPS modules and the information they submit.</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>de.fr1zle.gpsserver.GpsServer</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Ce que je fais mal?
source d'informationauteur fr1zle
Vous devez vous connecter pour publier un commentaire.
Lorsque vous exécutez à partir d'Eclipse, Eclipse configure le chemin de classe pour vous. Par conséquent, vous ne courez pas dans cette question.
Lorsque vous sont en cours d'exécution en dehors d'Eclipse, vous devez configurer le CLASSPATH soit en fournissant le chemin d'accès à ces fichiers jar ie
file:/dev/libs/mina-core-2.0.3.jar
dans leMANIFEST.MF
ou par l'ajout de la-cp
option lors de l'exécution de l'application. N'oubliez pas que les entrées dans le class-path dans le fichier manifeste sont soit par rapport au POT dans lequel ils sont incorporés, ou chemin d'accès absolu vers un fichier local directory.Votre autre option est de package comme un bocal à l'aide de l'maven assembly plugin jar-with-dependencies.
Une autre option est d'utiliser maven-dépendance-plugin. Vous pouvez copier toutes les bibliothèques dépendantes à un dossier comme lib, et l'utiliser pour classpath.
Afin de copier les dépendances:
et pour le classpath, ici classpathPrefix spécifie que toutes les dépendances doit être situé dans une "lib" dossier relatif à l'archive.
Pour plus d'informations:
http://www.ibm.com/developerworks/java/library/j-5things13/index.html
http://maven.apache.org/plugins/maven-dependency-plugin/usage.html