Apache Commons IO не добавляется в банку - PullRequest
1 голос
/ 11 января 2012

Я недавно добавил Apache Commons IO в мой небольшой проект, чтобы я мог создать файл журнала. Все отлично работает в моей IDE (IntelliJ), но когда я создаю исполняемый jar, Commons IO там нет, поэтому я получаю:

Исключение в потоке "main" java.lang.NoClassDefFoundError: орг / апач / Обще / IO / вход / TailerListener.

IO Commons был добавлен в мой POM:

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

У меня никогда не было проблем с добавленными зависимостями, как это раньше. Чего мне не хватает?

1 Ответ

0 голосов
/ 11 января 2012

Это не совсем то, как работают зависимости.Зависимости только для того, чтобы рассказать другим проектам, что нужно делать. Они не включаются автоматически в вашу банку.

Причина этого в том, что при определенных обстоятельствах это расточительно.Представьте, что у вас есть две банки: 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>
...