ClassNotFoundException dans le projet Maven
Il y a une maven en fonction du projet, qui peut être construit par maven install
, mais jeter l'exception lorsque vous exécutez le pot:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/CommandLineParser
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.CommandLineParser
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:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Je veux savoir pourquoi java ne peut pas trouver le maven dépendance de la bibliothèque ?
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.artofsolving.jodconverter</groupId>
<artifactId>jodconverter-core</artifactId>
<version>3.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>JODConverter - Core Library</name>
<description>
JODConverter converts office documents using OpenOffice.org
</description>
<url>http://jodconverter.googlecode.com</url>
<licenses>
<license>
<name>GNU Lesser General Public License, Version 3 or later</name>
<url>http://www.gnu.org/licenses/lgpl.html</url>
</license>
</licenses>
<scm>
<url>http://jodconverter.googlecode.com/svn/trunk/jodconverter-core</url>
<connection>scm:svn:https://jodconverter.googlecode.com/svn/trunk/jodconverter-core/</connection>
</scm>
<inceptionYear>2003</inceptionYear>
<developers>
<developer>
<id>mirko.nasato</id>
<name>Mirko Nasato</name>
<email>[email protected]</email>
</developer>
</developers>
<contributors>
<contributor>
<name>Shervin Asgari</name>
<email>[email protected]</email>
</contributor>
</contributors>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<!-- required for org.hyperic:sigar -->
<id>jboss-public-repository-group</id>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
</repository>
</repositories>
<dependencies>
<!-- Required dependencies -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>juh</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>ridl</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.openoffice</groupId>
<artifactId>unoil</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<!-- for the command line tool -->
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
<!-- Optional dependencies -->
<dependency>
<!-- for more robust process management -->
<groupId>org.hyperic</groupId>
<artifactId>sigar</artifactId>
<version>1.6.5.132</version>
<optional>true</optional>
</dependency>
<dependency>
<!-- for JSON configuration -->
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
<optional>true</optional>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.0.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<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>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<!-- don't run tests in parallel -->
<perCoreThreadCount>false</perCoreThreadCount>
<threadCount>1</threadCount>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<archive>
<manifest>
<mainClass>org.artofsolving.jodconverter.cli.Convert</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/dist.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.4</version>
</plugin>
</plugins>
</reporting>
</project>
Comment voulez-vous exécuter? Et ce qui est de la structure de dossier/fichier à partir duquel vous exécutez?
Et le projet est github.com/mirkonasato/jodconverter
Je pense que je n'ai pas M2_HOME 🙁
java -jar target/jodconverter-core-3.0-SNAPSHOT.jar
Et le projet est github.com/mirkonasato/jodconverter
Je pense que je n'ai pas M2_HOME 🙁
OriginalL'auteur why | 2013-04-08
Vous devez vous connecter pour publier un commentaire.
Lors de l'exécution de votre Bocal avec
java -jar
, vous n'êtes plus en cours d'exécution avec le maven résolution des dépendances. Vous devez vous assurer que tous les pots que vous dépendez sont disponibles à la relative loacation specificied dans leMANIFEST.mf
fichier dans votre Bocal. Généralement, vous utilisez l'assemblée plugin pour créer une distribuable de l'archive qui crée cette structure. Ou vous pouvez utiliser un uberjar/onejar plugin pour le tout inclus à l'intérieur de votre Pot.Bonjour , pourriez-vous s'il vous plaît vérifier moi une autre question similaire? stackoverflow.com/questions/15862628/...
OriginalL'auteur NilsH
Vous avez 2 options pour résoudre ce problème:
Option 1 - utiliser les plugins ci-dessous pour copier des dépendances à une "lib" du dossier (voir outputDirectory) et faire de votre Runnable JAR savoir où ils en sont (voir classpathPrefix)
Option 2 - Utilisez maven-assembly-plugin pour créer un seul BOCAL avec toutes les dépendances inclus. (toutes les dépendances sont extraites et comprimées ensemble, dans le même POT)
OriginalL'auteur cahen
J'ai vu le problème, trop. Cobertura crée instrumenté des copies de tous compilés classfiles (dans target/classes) par la manipulation de bytecode. Mon fichier jar contenus instrumentés de fichiers de classe (à partir de target/generated-classes/cobertura), mais cobertura.jar manquait à l'appel. Donc, ClassNotFoundException était la bonne réaction.
Cependant, depuis mon POM ne contient pas de tout soupçon, qui à l'intention des classes pour l'emballage, Maven a le libre choix ... et il utilise l'instrumentation d'un ensemble de fichiers.
Ma solution était très simple: mvn clean et mvn package. Le premier appel supprime tous les instrumenté classes. Ensuite, le deuxième appel ne trouve que le sans classes, sans références externes à Cobertura.
OriginalL'auteur C. Grewe