Зависимость в Maven - PullRequest
       41

Зависимость в Maven

4 голосов
/ 03 декабря 2011

Я действительно новичок в Maven. Я немного запутался насчет функции зависимости. Я знаю, что могу добавить зависимость в файл POM, как это

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.1</version>
</dependency>

Что это на самом деле означает? Означает ли это, что мне не нужно импортировать файлы jar slf4j в мой проект? Если так, как мой проект получает доступ к этим библиотекам?

Я читал о зависимости от сайта maven , но мне это мало помогло.

Может кто-нибудь объяснить это проще.

Спасибо

Ответы [ 4 ]

5 голосов
/ 03 декабря 2011

Nutshell: это означает, что ваш проект зависит от slf4j, версия 1.6.1.

Кроме того:

  • Если вы строите свой проект с помощью Maven (или ваша IDE поддерживает Maven), вам не нужно ничего делать, чтобы использовать slf4j. (Помимо обычных соображений исходного кода, таких как разумное утверждение import и т. Д.)
  • slf4j v. 1.6.1 будет извлечен из репозитория Maven по умолчанию в ваш локальный репозиторий, что означает ...
  • ... ~/.m2/repository это ваш репозиторий. slf4j будет помещен в $M2_HOME/org/slf4j/$(artifactId}/1.6.1 и будет включать (в общем) файл JAR, файл POM и файл хеш-функции.
  • Зависимости Slf4j также будут загружены в ваш локальный репозиторий.
  • Зависимости этих зависимостей будут загружаться до бесконечности / до тошноты. (Источник «первое использование библиотеки загружает интернет» шутит, если есть много зависимостей; не относится к slf4j.) Это «транзитивное управление зависимостями» - одна из оригинальных целей Maven.
2 голосов
/ 03 декабря 2011

Если вы не используете maven, вы бы вручную загрузили и использовали зависимости, которые вам нужны для вашего проекта. Возможно, вы поместите их в папку lib и укажите это местоположение в вашей IDE, а также в инструменте сборки.

maven управляет этими зависимостями для вас. Вы указываете зависимость, в которой нуждается ваш проект, в установленном формате, и maven загружает их для вас из Интернета и управляет ими. При создании вашего проекта maven знает, где он разместил эти зависимости, и использует их. Большинство IDE также знают, где находятся эти зависимости, когда обнаруживают, что это проект maven.

Почему это так важно? Как правило, большинство библиотек с открытым исходным кодом регулярно выпускают новые версии. Если ваш проект использует их, то каждый раз, когда требуется более новая версия, вам нужно будет вручную загрузить ее и управлять ею. Более того, каждая зависимость, в свою очередь, может иметь другие зависимости (называемые транзитивной зависимостью). Если вы не используете maven, вам также потребуется идентифицировать, загрузить и управлять этими переходными зависимостями.

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

1 голос
/ 03 декабря 2011

При компиляции вашего проекта Maven загрузит соответствующий файл .jar из репозитория, обычно из центрального репозитория (вы можете настроить различные репозитории либо для зеркалирования, либо для ваших собственных библиотек, которые недоступны в центральных репозиториях).

Если ваша IDE знает о Maven, она проанализирует pom и либо сама загрузит зависимости, либо попросит Maven сделать это.Затем он откроет jar-файлы зависимостей, и вы получите автозаполнение: среда IDE «импортирует» jar-файлы для вас за кулисами.

Хранилище содержит не только файл «.jar» для зависимости, но также файл .pom, который описывает его зависимости.Итак, maven рекурсивно загрузит свои зависимости, и вы получите все jar-файлы, необходимые для компиляции вашего программного обеспечения.

Затем, когда вы попытаетесь запустить ваше программное обеспечение, вы должны будете сообщить JVM, где найтиэти зависимости (т. е. вы должны поместить их в путь к классам).

Обычно я копирую зависимости в каталог target/lib/, поэтому его легко развернуть и запустить.Для этого вы можете использовать maven-dependency-plugin, который вы указываете в <build>:

<build>
  <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>copy-dependencies</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
        </configuration>
      </execution>
    </executions>
  </plugin>
</build>
1 голос
/ 03 декабря 2011

В Интернете существует множество серверов, на которых размещаются артефакты (файлы jar), которые можно загрузить как часть сборки maven.Вы можете добавить зависимости, как показано выше, чтобы описать, какие jar-файлы вам нужны для создания кода.Когда maven отправляется на сборку, он связывается с одним из этих серверов и загружает файл jar на ваш компьютер и помещает его в локальный репозиторий, обычно

${user_home}/.m2/repository

Серверы, контакты которых maven должны быть настроены в вашем проекте maven pomфайл в разделе, подобном

<repositories>
    <repository>
    </repository>
</repositories>

Прототип сервера можно увидеть по адресу repo1.maven.org

Хорошая особенность maven в том, что если выСписок необходим, он вытянет не только эту банку, но и любые банки, которые нужны этой банке.Очевидно, что поскольку вы вытаскиваете банки на свой компьютер, они загружаются только тогда, когда не могут найти их на вашем компьютере, таким образом, не замедляя сборку каждый раз (только в первый раз).

...