2012-01-11 13 views
1

私は最近Apache Commons IOを小さなプロジェクトに追加しました。すべては私のIDE(IntelliJの)で素晴らしい作品が、私は実行可能なjarファイルを作成するときに、コモンズIOはそこにはないので、私が手:Apache Commons IOがjarに追加されない

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という2つのjarファイルがあるとします。どちらもapacheコモンズに依存しています。おそらく、それぞれを共通のライブラリディレクトリから分離してロードするほうが、より効率的(スペース単位)になるでしょう。

あなたは、いわゆる「脂肪ジャー」(または任意の1瓶であなたのすべての依存関係を持つための適切な用語がある)をしたい場合、あなたはこの1つのようなプラグインを使用する必要があります。

<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は何らかの理由で瓶を追加していませんでした。アーティファクト設定をやり直して問題を修正しました。 – jwforsyth

関連する問題