Spring Maven-Projekt commons-logging LogFactory NoClassDefFoundError
Ich habe ein Maven Projekt, das mit Frühling zu laufen, ein json-web-service. Das Projekt läuft einwandfrei in NetBeans. Es kompiliert wird, in eine jar-Datei und die jar-Datei läuft wunderbar in einer Ubuntu-VM. Jedoch, wenn ich versuche, führen Sie die jar-Datei in Windows bekomme ich folgende Fehlermeldung.
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
Habe ich einen ganzen Tag versuchen, dies herauszufinden, ohne Erfolg.
Kann jemand Einblick geben?
Dies ist mein pom.xml unten.
<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>
- Wenn ich extrahieren Sie den Inhalt der jar-Datei und schauen sich das MANIFESTIEREN.MF, es enthält nicht ein Klasse Weg. Dies könnte sein, warum es nicht finden können, die commons-logging Bibliothek?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spring-Framework verwendet Apache Commons Logging API für die Protokollierung.
In Spring Boot parent-POM gibt es einen expliziten Ausschluss der Commons Logging Bibliothek.
Dies bedeutet, dass es Links zu von Ihnen gewählten Commons-Logging Implementierung bis zum Frühjahr von Klassen zur Laufzeit.
Können Sie hinzufügen, commons-logging, um Ihre POM, neueste version ist 1.2, veröffentlicht im Juli 2014.
Oder Sie können die Brücke Apache-Commons-Logging-API zu SLF4J-Api (siehe http://www.slf4j.org/legacy.html) mit der jcl-over-slf4j.jar und fügen Sie dann eine SLF4L Implementierung Ihrer Wahl. Zum Beispiel:
Sie enthalten die folgenden auf Ihrem
commons-logging
Abhängigkeit:Dies ist eine Anweisung, um zu verhindern, dass
commons-logging
aus in Ihrem Glas. Daher ist es nicht auf dem classpath.