Maven не будет развертывать зависимости - PullRequest
6 голосов
/ 03 августа 2010

У меня есть простой проект с 3 зависимостями, но по какой-то причине, когда я работаю с eclipse, запустите как -> maven install я не получаю зависимости. не внутри банки со снимками и не снаружи ... любая идея? это мой пом:

<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com</groupId>
  <artifactId>trade</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>trade</name>
  <url>http://maven.apache.org</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

Ответы [ 3 ]

17 голосов
/ 03 августа 2010

(...) Я не получаю зависимости. не внутри банки со снимками и не снаружи ... есть идеи?

Да: это просто не должно происходить для проекта с jar упаковкой. Созданный jar «only» содержит классы из вашего проекта, зависимости «only» используются во время компиляции и выполнения тестов.

Из Введение в механизм зависимости :

Область зависимостей

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

Доступно 6 областей:

  • компилировать
    Это область действия по умолчанию, которая используется, если она не указана. компилировать зависимости доступны во всех пути к классам проекта. Более того, эти зависимости распространяются на зависимые проекты.
  • при условии
    Это очень похоже на компиляцию, но указывает, что вы ожидаете JDK или контейнер для обеспечения зависимости при во время выполнения. Например, при построении веб-приложение для Java Enterprise Edition, вы бы установили зависимость от Servlet API и связанные API Java EE для предоставленной области потому что веб-контейнер обеспечивает эти классы. Эта область только доступно на компиляции и тесте classpath, и не является переходным.
  • выполнения
    Эта область указывает, что зависимость не требуется для компиляция, но для исполнения. Это находится во время выполнения и тестовых путей, но не путь к классам компиляции.
  • тест
    Эта область указывает, что зависимость не требуется для нормального использование приложения, и только доступны для тестовой компиляции и фазы выполнения.
  • система
    Эта область похожа на предоставленную, за исключением того, что вы должны предоставить банку, в которой он содержится в явном виде. Артефакт всегда доступно и не ищется в хранилище.
  • импорт (доступно только в Maven 2.0.9 или более поздней версии)
    Эта область используется только на зависимости типа pom в <dependencyManagement> раздел. Это указывает на то, что указанный POM следует заменить на зависимости в этом POM <dependencyManagement> раздел. Поскольку они заменены, зависимости с объемом импорта на самом деле не участвовать в ограничении транзитивность зависимости.

...

Если вы хотите создать автономный исполняемый файл jar, содержащий зависимости, рассмотрите возможность использования Плагин сборки Maven и предварительно определенный дескриптор jar-with-dependencies. Посмотрите на эти предыдущие ответы:

Другие опции включают плагин maven shade , onejar-maven-plugin . Для простых случаев использования я предлагаю использовать плагин сборки.

1 голос
/ 03 августа 2010

Вы выбрали стиль упаковки в банке.Поэтому зависимости не будут присутствовать внутри пакета.

Когда вы соберете пакет и выполните фазу компиляции, Maven уже загрузит зависимости в локальный репозиторий Maven (обычно расположенный в каталоге .m2 под вашимhome directory).

Если вы хотите, чтобы зависимости были упакованы в дистрибутив, лучше использовать файл EAR / WAR, и это относится только к приложениям Java EE, а не к автономным приложениям Java SE.

Кроме того, некоторые зависимости не будут упакованы, несмотря на задействованную схему упаковки EAR / WAR.Это связано с областями применения на зависимостях.JUnit, имеющий область тестирования, никогда не будет упакован, так как его использование ограничено только выполнением теста.

0 голосов
/ 03 августа 2010

Прежде всего, убедитесь, что вы можете построить проект вне Eclipse.В командной строке попробуйте 'mvn install'.Это должно поместить ваши deps в хранилище $ HOME / .m2 /.Если это так, то проблема в Eclipse.

Если ваша цель состоит в том, чтобы упаковать свои архивы в архив, вам нужно взглянуть на сборку и / или зависимость плагины.

Также я рекомендую установить m2eclipse .

...