2014-09-10 92 views
0

我想編譯我的項目,它使用Gradle和Maven。該項目在我的本地maven存儲庫上使用另一個庫。Gradle和Maven編譯我的項目,但我得到NoClassFoundError

搖籃:該庫在搖籃和Maven參考

dependencies{ 
    compile 'cf.charly1811.java.utils:MimeType:1.0' 
} 

Maven的:

<!-- Dependencies --> 
<dependencies> 
    <dependency> 
     <groupId>cf.charly1811.java.utils</groupId> 
     <artifactId>MimeType</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 

當我嘗試使用mvn clean packagegradle clean jar它成功編譯項目。錯誤發生時的MimeType類被稱爲:

 Exception in thread "Thread-4" java.lang.NoClassDefFoundError: cf/charly1811/java/utils/MimeType at cf.charly1811.java.web.RequestHandlerThread.process(RequestHandlerThread.java:120) 
      at cf.charly1811.java.web.RequestHandlerThread.handleRequest(RequestHandlerThread.java:85) 
      at cf.charly1811.java.web.RequestHandlerThread.run(RequestHandlerThread.java:64) 
    Caused by: java.lang.ClassNotFoundException: cf.charly1811.java.utils.MimeType 
      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 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
      at java.lang.ClassLoader.loadClass(Unknown Source) 
      ... 3 more 

我不知道是什麼造成這個錯誤... 請幫助。

編輯: Mime類型的pom.xml:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <name>MimeType</name> 
    <description>Library to easily get the type of a file</description> 
    <groupId>cf.charly1811.java.utils</groupId> 
    <artifactId>MimeType</artifactId> 
    <version>1.0</version> 

    <licenses> 
     <license> 
      <name>Apache License, Version 2.0</name> 
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url> 
      <distribution>repo</distribution> 
      <comments>A business-friendly OSS license</comments> 
     </license> 
    </licenses> 
</project> 

的HttpServer(主要項目)的pom.xml

<project> 
<modelVersion>4.0.0</modelVersion> 

<name>HttpServer</name> 
<description>A simple HTTP Server written in JAVA</description> 

<groupId>cf.charly1811.java.web</groupId> 
<artifactId>HttpServer</artifactId> 
<version>1.0</version> 

<!-- Dependencies --> 
<dependencies> 
    <dependency> 
     <groupId>cf.charly1811.java.utils</groupId> 
     <artifactId>MimeType</artifactId> 
     <version>1.0</version> 
    </dependency> 
</dependencies> 

<!-- License --> 
<licenses> 
    <license> 
     <name>Private use</name> 
     <url>http://choosealicense.com/licenses/no-license/</url> 
     <comments>This Software is for private use Only</comments> 
    </license> 
</licenses> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <mainClass>cf.charly1811.java.Main</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

</project> 

編輯 我忘了澄清1兩件事: 我用的IntelliJ IDEA。當我嘗試使用「運行」來編譯項目時,它會編譯所有內容,我不會收到此錯誤。它只發生在我使用Gradle或Maven編譯項目時

+0

請刪除你的清單文件並執行maven clean install。 很確定這個包沒有被導入到您的清單中。如果這個問題仍然存在,那麼手動導入這個軟件包,並調查爲什麼它不能自動導入。 – StackFlowed 2014-09-10 13:16:40

+0

我刪除了我的Manifest文件,重新編譯了MimeType庫並重新編譯了我的主項目。仍然得到相同的錯誤。我已經手動導入MimeTYpe庫並再次嘗試,現在它正在工作。也許問題來自MimeType pom文件?我用圖書館的pom文件和項目更新了這個問題 – 2014-09-10 13:46:08

+0

不,我認爲可能是構建中的問題刪除你的本地回購。從工作空間中刪除項目...再次檢查並構建它。如果問題仍然存在,那麼您需要進一步調查。您是否在使用清單導入時出現奇怪的常規中使用此導入。 – StackFlowed 2014-09-10 13:50:03

回答

1

試圖做mvn clean install它會嘗試編譯所有類,並嘗試將生成的項目jar存儲在本地存儲庫中,如果出現問題,您應該能夠解決它否則後會看到

0

請刪除您的清單文件,並做一個maven乾淨安裝。很確定這個軟件包沒有被導入你的清單中。如果這個問題仍然存在,那麼手動導入這個軟件包,並調查爲什麼它不能自動導入。

0

閱讀本NoClassDefFoundError on Maven dependency後,我注意到以下幾點:

「默認情況下,Maven的不依賴捆綁在JAR文件它 版本,你也不會爲他們提供的類路徑,當你」 試圖在命令行執行JAR文件,這就是爲什麼當試圖執行 代碼時, Java虛擬機無法找到庫類文件。

我認爲這是搖籃

同樣的事情

現在我要找到一種方法來捆綁我的依賴關係。

編輯 我終於找到了解決方案(搖籃)

  1. 列表項

創建您的構建。gradle這個apply以下插件:

apply plugin:'java' 
apply plugin: 'application' 
  • 添加您依賴(See Java Plugin
  • 使用該命令

    gradle這個清潔distZip

  • 編譯該項目如果你只是想運行你的程序:
    gradle clean run 
    

    編輯

    如果你使用Maven。你可以使用Apache Maven shade Plugin將你的依賴包綁定在Jar文件中

    相關問題