2012-01-11 67 views
1

我最近添加了Apache Commons IO到我的一個小項目中,這樣我就可以拖拽一個日誌文件。一切都在我的IDE(的IntelliJ)的偉大工程,但是當我創建可執行的JAR文件,共享IO是不是在那裏,所以我得到:Apache Commons IO沒有被添加到罐子

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/input/TailerListener.

下議院IO已經被添加到我的POM:

<dependency> 
    <groupId>commons-io</groupId> 
    <artifactId>commons-io</artifactId> 
    <version>2.1</version> 
</dependency> 

我從來沒有像以前那樣增加依賴關係的問題。我錯過了什麼?

回答

0

這並不完全如何依賴工作。依賴關係只是告訴其他項目需要插入什麼。它們不會自動包含在jar中。

原因是因爲在某些情況下浪費。想象一下你有兩個罐子:a.jar和b.jar。兩者都依賴於apache commons。它可能會更高效(空間方面),只是簡單地將它們從公共庫目錄中分離並加載。

如果你想有一個所謂的「胖罐子」(或任何具有在一個罐子所有的依賴關係的正確項),你需要使用一個插件像這樣的:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2.1</version> 
    <configuration> 
     <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <archive> 
     <manifest> 
      <mainClass>com.test.App</mainClass> 
     </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
     <id>make-assembly</id> <!-- this is used for inheritance merges --> 
     <phase>package</phase> <!-- bind to the packaging phase --> 
     <goals> 
      <goal>single</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 
+0

我發現我的問題,因爲某些原因,IntellJ沒有添加jar。重做工件設置糾正了問題。 – jwforsyth 2012-01-11 05:04:21

相關問題