2014-04-10 35 views
1

我在做一個聊天項目。當我在ide(netbeans)中運行它時,它通常打開並且工作得很好。但是,當我從終端運行我得到的錯誤是這樣的:使用netbeans運行maven jgroups項目時產生java.lang.NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: org/jgroups/Receiver at com.mycompany.chatapp1.ChatWindow.<init>(ChatWindow.java:32) at com.mycompany.chatapp1.Main.main(Main.java:10) Caused by: java.lang.ClassNotFoundException: org.jgroups.Receiver at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) ... 2 more

我運行它通過命令java -jar ChatApp1-1.0-SNAPSHOT.jar

,這裏是我的依賴信息: <dependencies> <dependency> <groupId>org.jgroups</groupId> <artifactId>jgroups</artifactId> <version>3.4.3.Final</version> </dependency> </dependencies>

出了什麼問題?

+0

看起來,當您運行的東西throough命令提示符 –

+0

你的依賴瓶是失蹤我應該改變以使用相同的命令運行它? – user3519810

+0

只是出於好奇,你爲什麼要使用命令提示符時,一切工作正常,你的IDE? –

回答

3

當您創建一個jar項目時,不包括依賴項目。因此,您需要通過-cp在命令行上設置類路徑,這會非常麻煩,或者您可以使用Maven Shade Plugin,其中包括您的jar中的所有依賴關係,從而生成完整的可執行jar文件。

包括在你的pom下面的代碼片段(當然你的主類):

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.2</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <mainClass>my.main.class</mainClass> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
+0

哦,老兄,你真棒:D之前看過這個代碼,但選擇了更簡潔的版本。非常感謝您解釋! – user3519810

0

一個集成開發環境的整點是設置和管理你的源代碼和它的依賴。 Eclipse可以做到這一點,Netbeans以另一種方式做,IntelliJ也做到這一點。

您可以嘗試通過模擬Eclipse的部署程序集來重現它。找出你的庫和源代碼的存儲位置。將這些目錄用於您的javac命令。然後用包含main方法的類來執行java。

如果您的項目是一個Web應用程序,這會變得更加困難。

你真的應該讓IDE爲你做。

+3

「你真的應該讓IDE爲你做。」 - 然後你將不知道IDE如何做,所以每次出現問題(而且它會)將會是另一個瘋狂的爭奪,不僅僅是基本的Java文檔,而且每個IDE實際上都是巨大的複雜混亂。讓IDE做到這一點真的非常好。但是當IDE吐出這樣一個神祕的錯誤信息時,你仍然應該知道它是什麼意思並自己修復它。一個IDE是一個快捷方式,而不是一個永無止境的嚮導,總能讓你的項目發揮作用。 – meustrus