Printemps de projet Maven commons-logging LogFactory NoClassDefFoundError
J'ai un projet Maven qui utilise le Printemps pour exécuter un json web service. Le projet s'exécute correctement dans NetBeans. Il sera compilé dans un fichier jar, et le fichier jar fonctionne très bien sur une machine virtuelle Ubuntu. Cependant, lorsque j'essaie d'exécuter le fichier jar dans Windows, j'obtiens l'erreur suivante.
java-jar myjar.jar --server.port=8000
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:53)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.springframework.core.io.support.SpringFactoriesLoader.<clinit>(SpringFactoriesLoader.java:58)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:368)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:359)
at org.springframework.boot.SpringApplication.initialize(SpringApplication.java:230)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:206)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:961)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:950)
at com.baselayer.dal.core.Application.main(Application.java:20)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(Unknown Source)
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 java.lang.ClassLoader.loadClass(Unknown Source)
... 14 more
J'ai passer une journée entière à essayer de comprendre, en vain.
Quelqu'un peut nous donner un indice?
C'est mon pom.xml ci-dessous.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baselayer</groupId>
<artifactId>dal</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Baselayer Core DAL</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.0.RELEASE</version>
</parent>
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArguments>
<endorseddirs>${endorsed.dir}</endorseddirs>
</compilerArguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${endorsed.dir}</outputDirectory>
<silent>true</silent>
<artifactItems>
<artifactItem>
<groupId>javax</groupId>
<artifactId>javaee-endorsed-api</artifactId>
<version>7.0</version>
<type>jar</type>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<exclusions>
<exclusion>
<artifactId>antlr</artifactId>
<groupId>org.antlr</groupId>
</exclusion>
<exclusion>
<artifactId>metrics-core</artifactId>
<groupId>com.yammer.metrics</groupId>
</exclusion>
<exclusion>
<artifactId>liquibase-core</artifactId>
<groupId>org.liquibase</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>2.1.2</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.2</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
</project>
Si j'ai extrait le contenu du fichier jar et de regarder le MANIFESTE.MF, il ne contient pas un chemin de classe. Cela pourrait-il être la raison pour laquelle il ne peut pas trouver le commons-logging bibliothèque?
OriginalL'auteur Mark Nugent | 2015-01-13
Vous devez vous connecter pour publier un commentaire.
Spring Framework utilise Apache Commons API de Journalisation pour la journalisation.
Au Printemps de Démarrage parent POM il y a une exclusion explicite de la chambre des Communes bibliothèque de Journalisation.
Cela signifie qu'il est à gauche de vous fournir un choisi Commons Logging mise en Œuvre de Printemps classes au moment de l'exécution.
Vous pouvez ajouter commons-logging à votre POM, la dernière version est 1.2, publié en juillet 2014.
Ou vous pouvez pont Apache Commons API de Journalisation de SLF4J Api (voir http://www.slf4j.org/legacy.html) avec le jcl-over-slf4j.jar puis ajouter un SLF4L mise en œuvre de votre choix. Par exemple:
jcl-sur-slf4j est slf4j pont. Ensuite, vous pouvez ajouter le dire, logback, qui est une mise en œuvre, au lieu de slf4j-simple. Le slf4j-simple ci-dessus est un slf4j mise en œuvre.
OriginalL'auteur Lorenzo Conserva
- Vous d'inclure les éléments suivants sur votre
commons-logging
dépendance:C'est une instruction pour prévenir
commons-logging
d'être inclus dans votre bocal. Par conséquent, il ne pas être sur le chemin de la classe.Vous êtes à l'aide de Spring Boot, de sorte que vous ne devriez pas réellement besoin d'ajouter de la journalisation des dépendances. En fait, vous semblez être essayer de passer outre le bâti dans les communes de la journalisation des dépendances avec une version inférieure. Essayez de supprimer cette dépendance complètement.
J'ai enlevé la dépendance, mais j'obtiens toujours la même erreur.
Avez-vous essayé de le construire à partir de la ligne de commande?
OriginalL'auteur Steve