Apache Commons IO没有被添加到jar中

时间:2012-01-11 04:45:15

标签: maven apache-commons executable-jar

我最近将Apache Commons IO添加到我的一个小项目中,以便我可以拖尾日志文件。一切都在我的IDE(IntelliJ)中运行良好,但是当我创建可执行jar时,Commons IO不在那里,所以我得到:

  

线程“main”中的异常java.lang.NoClassDefFoundError:   组织/阿帕奇/公地/ IO /输入/ TailerListener。

Commons IO已添加到我的POM中:

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

我之前从未遇到像这样添加依赖关系的问题。我错过了什么?

1 个答案:

答案 0 :(得分:0)

这并不完全是依赖关系如何运作的。依赖关系只是告诉其他项目要吸引什么。它们不会自动包含在你的jar中。

之所以这样做是因为在某些情况下它会浪费。想象一下,你有两个罐子:a.jar和b.jar。两者都依赖于apache的公地。只需将每个分离并从公共库目录中加载,就可能更有效(空间方面)。

如果你想要一个所谓的“胖罐子”(或者在一个罐子里拥有所有依赖关系的适当术语),你需要使用像这样的插件:

  <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>