2015-06-17 49 views
0

我有一個示例dropwizard應用程序。我收到以下異常:dropwizard異常:java.lang.NoClassDefFoundError

>java -jar target/order-service-1.0.0-SNAPSHOT.jar 

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/engine/jdbc/connections/spi/ConnectionProvider 
    at io.dropwizard.hibernate.HibernateBundle.<init>(HibernateBundle.java:20) 
    at com.blurb.order.OrderApplication$1.<init>(OrderApplication.java:61) 
    at com.blurb.order.OrderApplication.<init>(OrderApplication.java:52) 
    at com.blurb.order.OrderApplication.main(OrderApplication.java:133) 
Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.jdbc.connections.spi.ConnectionProvider 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 4 more 

如何解決此異常?

編輯

下面是行家樹蔭插件配置:

<plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.6</version> 
       <configuration> 
        <createDependencyReducedPom>true</createDependencyReducedPom> 
        <filters> 
         <filter> 
          <artifact>*:*</artifact> 
          <excludes> 
           <exclude>META-INF/*.SF</exclude> 
           <exclude>META-INF/*.DSA</exclude> 
           <exclude>META-INF/*.RSA</exclude> 
          </excludes> 
         </filter> 
        </filters> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <transformers> 
           <transformer 
             implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> 
           <transformer 
             implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>com.*.order.OrderApplication</mainClass> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
+0

你是怎麼建立你的jar的? 'target'文件夾指向一個Maven項目 - 是這種情況嗎? – Tunaki

+0

你有'dropwizard-hibernate'作爲maven的依賴嗎? – sfat

+0

@Tunaki:https://dropwizard.github.io/dropwizard/getting-started.html#running-your-application – riship89

回答

1

來解決此類問題的方法如下:

  1. 找出失蹤類(在這種情況下:org/hibernate/engine/jdbc/connections/spi/ConnectionProvider)應該是。通常你可以從包名稱中知道。這個似乎來自休眠,所有的專業,找到這個類服務的jar失敗了我,但谷歌搜索出現這個:https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/engine/jdbc/connections/spi/class-use/ConnectionProvider.html,所以你應該檢查這個類的hibernate - *。jar。

  2. 如果你沒有下載/指定包含在你的應用程序中的jar,那麼你顯然必須現在添加它並完成。

  3. 通常你認爲你在類路徑中有它,但是由於某種原因你不這樣做。 在這種情況下,首先讓你成爲classpath。取決於你的環境,這可能會很棘手。在簡單的桌面應用程序中,您可以使用系統屬性java.class.path。在應用程序服務器和類似的環境中,這有點複雜。您可能必須調試類加載器,才能找到它們實際查找的位置。通常你可以通過使用你認爲你正在使用的類路徑來縮短這一步,但是如果有問題的類在假定的類路徑中並且仍然沒有顯示出來,這一步將會有所幫助。

  4. 確保你的jar真的被添加到類路徑中。也要注意微小的差異。一些庫已經改變了它們的包名,所以一個錯誤版本的jar可能會有一個類與你想加載的類非常相似,但只是在錯誤的包中。

相關問題