2015-01-13 16 views
5

Springを使用してjson Webサービスを実行するMavenプロジェクトがあります。プロジェクトはNetBeansで正常に動作します。これはjarファイルにコンパイルされ、jarファイルはUbuntu VMで正常に動作します。しかし、Windowsでjarファイルを実行しようとすると、次のエラーが発生します。Spring MavenプロジェクトCommons-LogFactory NoClassDefFoundError

の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 

私は無駄に、これを理解しようとしている全体の一日を過ごす持っています。

誰でも光を放つことはできますか?

これは以下のpom.xmlです。

<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> 
+0

jarファイルの内容を抽出してMANIFEST.MFを調べると、クラスパスは含まれません。これがコモンズロギングライブラリを見つけることができないのではないでしょうか? – MNPHX

答えて

1

あなたcommons-logging依存関係に次が含まれていました。

<scope>provided</scope> 

これはあなたのjarファイルに含まれているからcommons-loggingを防止するための命令です。したがって、それはクラスパスにはありません。

+0

をpom.xmlから削除し、jarファイルを再コンパイルしましたが、同じエラーが表示されます。私は新しいjarファイルの "jar tf"を実行し、それはcommons-logging-1.1.1.jarが私のjarファイルに含まれていることを示しています。 – MNPHX

+0

あなたはSpringブートを使用しているので、実際にロギングの依存関係を追加する必要はありません。実際、ビルドされたコモンログの依存関係を下位バージョンで上書きしようとしているようです。その依存関係を完全に削除してみてください。 – Steve

+0

依存関係を削除しましたが、同じエラーが表示されます。 – MNPHX

10

Spring Frameworkは、ログにApache Commons Logging APIを使用します。 Springブートの親POMにはCommons Loggingライブラリが明示的に除外されています。

<exclusion> 
    <artifactId>commons-logging</artifactId> 
    <groupId>commons-logging</groupId> 
</exclusion> 

これは、実行時に春のクラスに実装ロギング選ばれたコモンズを提供するために、あなたに残っていることを意味します。

あなたのPOMへコモンズ・ロギングを追加することができ、最新バージョンは、7月にリリースされ、1.2である2014年

<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.2</version> 
</dependency> 

それとも、jcl-で(http://www.slf4j.org/legacy.htmlを参照)SLF4J APIにAPIロギングのApache Commonsのを埋めることができますover-slf4j.jarを実行して、選択したSLF4L実装を追加します。たとえば、

+1

jcl-over-slf4jを使用して私の問題を解決しました –

+0

jcl-over-slf4jはslf4jブリッジです。次に、slf4j-simpleの代わりに、実装であるlogbackを追加することができます。上記のslf4j-simpleはslf4j実装です。 –

関連する問題