2016-04-15 63 views
0

私はWebアプリケーションを構築し、Excelシートを処理するためにApache poiを使用しています。サーバーを起動すると、次の例外が発生します。それは、私がそれを構築し、herokuに展開しようとするまではうまく動作するために使用されます(しかし、無関係かもしれません)。 誰でもアイデアがありますか? java.lang.NoClassDefFoundError:org/apache/poi/EncryptedDocumentException

INFO: Starting service Catalina 
Apr 15, 2016 8:28:35 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.53 
Apr 15, 2016 8:28:36 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.engine.OnStartup 
java.lang.NoClassDefFoundError: org/apache/poi/EncryptedDocumentException 
    at org.engine.OnStartup.contextInitialized(OnStartup.java:16) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: org.apache.poi.EncryptedDocumentException 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    ... 10 more 

私のpom.xmlファイル:それは上のポイクラスが利用できる持っていたTomcatのセットアップに取り組んでいた

<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>psilos-toy</groupId> 
<artifactId>psilos-toy</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.8</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.gson</groupId> 
     <artifactId>gson</artifactId> 
     <version>2.2.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.codehaus.httpcache4j.resolvers</groupId> 
     <artifactId>resolvers-net-urlconnection</artifactId> 
     <version>4.0-M6</version> 
    </dependency> 

    <!-- Apache POI,for handling Excel Files --> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi</artifactId> 
     <version>3.14</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.poi</groupId> 
     <artifactId>poi-ooxml</artifactId> 
     <version>3.14</version> 
    </dependency> 
    <!-- jersey --> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.8</version> 
    </dependency> 
</dependencies> 
と私のweb.xmlおそらく

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4"> 
    <display-name>Restful Web Application</display-name> 
    <servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <servlet-class> 
        com.sun.jersey.spi.container.servlet.ServletContainer 
       </servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>org.endpoints</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
    <listener> 
    <listener-class>org.engine.OnStartup</listener-class> 
    </listener> 
</web-app> 
+0

warファイルにすべての依存関係が表示されていますか? 'unzip -l build.war | grep jar'は表示しなければなりません – Gagravarr

答えて

0

classpath。新しいHerokuの設定では、おそらくTomcat 7で利用可能なクラスがありません(poiクラスがTomcat 7にバンドルされているかどうか完全にチェックしていません)。

あなたができる最も簡単なことは、poiクラスをあなたのアプリケーションと共にバンドルすることで、自己完結型のアプリケーションを構築することです。これはアプリのサイズを増やしますが、poiライブラリのバージョンを制御できます。もちろん、ライブラリを常に定義されたフォルダ(Tomcatがクラスをロードすることがわかっている場所)にコピーすることができます。詳細は、maven-shade-pluginを参照してください。

+0

戦争にこれらの依存関係が含まれていてはなりませんか?私は彼のdepencedスコープのどれも提供されていないことを意味します – SGM1

+0

@panipsilos、org.apache.poiパッケージのEncryptedDocumentExceptionクラスファイルのpoi jarファイルを確認してください。 JVMがクラスファイル – VSK

+0

@ SGM1を見つけられないときはいつでも、java.lang.NoClassDefFoundErrorが返されます。「このスコープは、実行時に依存関係がJDKまたはWebサーバー/コンテナによって提供されることを示します」 - それはここのケースだと思う。そして、「戦争」はあなたを指していますか? –