Управление зависимостями в eclipse с помощью Maven.

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


Коротко о Maven

Maven - система для автоматической сборки проектов. Преимущества использования maven не ограничиваются упрощением управления зависимостями проекта и на столько велики и многочисленны, что просто не могут уложиться в одну статью.

Сердцем maven является конфигурационный файл pom.xml (Project Object Model). В этом файле описываются используемые плагины, зависимости и прочая необходимая информация:

<project>
  <!-- версия модели для POM-ов Maven 2.x всегда 4.0.0 -->
  <modelversion>4.0.0</modelversion>
 
  <!-- координаты проекта, то есть набор значений, который
       позволяет однозначно идентифицировать этот проект -->
 
  <groupid>com.mycompany.app</groupid>
  <artifactid>my-app</artifactid>
  <version>1.0</version>
 
  <!-- зависимости от библиотек -->
 
  <dependencies>
    <dependency>
 
      <!-- координаты необходимой библиотеки -->
 
      <groupid>junit</groupid>
      <artifactid>junit</artifactid>
      <version>3.8.1</version>
 
      <!-- эта библиотека используется только для запуска и компилирования тестов -->
 
      <scope>test</scope>
 
    </dependency>
  </dependencies>
</project>

Непосредственно зависимости описываются в разделе dependencies. Для каждой используемой в проекте библиотеки необходимо указать идентификатор группы и артефакта, а также требуемую ее версию. Этой информации maven-у достаточно, для поиска указанной библиотеки в репозиториях.

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

Значения идентификаторов группы и артефакта подключаемой библиотеки практически всегда можно найти на сайте www.mvnrepository.com. Если не удастся найти библиотеку там, скорее всего гугл подскажет вам дополнительный репозиторий, на котором искомая библиотека присутствует.

Дополнительные репозитории перечисляются в разделе repositories:
<project>
      ...
  <repositories>
    <repository>
      <id>another-maven-repo</id>
      <url>http://another-maven-repo.com</url>
    </repository>
  </repositories>
      ...
</project>

Часто, в качестве зависимости проекта, необходимо использовать собственные наработки. Искать их в центральном репозитории или даже в гугле, очевидно, не имеет смысла. В такой ситуации есть два пути: описать зависимость как системную и указать физический путь к библиотеки, или добавить библиотеку в локальный репозиторий maven-а (последнее предпочтительнее).

Чтобы описать зависимость как системную, помимо версии, идентификаторов группы и артефакта указывается scope, для которого устанавливается значение system:
<dependency>
  <groupId>ru.dokwork</groupId>
  <artifactId>mylib</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${home.dir}/projects/mylib/mylib.jar</systemPath>
</dependency>

Для добавления библиотеки в локальный репозиторий, существует команда install:
mvn install:install-file
  -Dfile=~/projects/mylib/mylib.jar
  -DgroupId=ru.dokwork
  -DartifactId=mylib
  -Dversion=1.0
  -Dpackaging=jar
  -DgeneratePom=true

Где:
  • <path-to-file>  путь к добавляемой библиотеке;
  • <group-id>      идентификатор группы, под которым будет  зарегистрирована библиотека;
  • <artifact-id>   имя артефакта;
  • <version>       версия добавляемой библиотеки;
  • <packaging>  способ упаковки библиотеки, чаще всего jar;
Первый подход хорош, когда библиотека лежит в доступном для всех разработчиков месте и путь до нее у всех совпадает. Иначе, битва за состояние pom файла в CVS будет не на жизнь, а на смерть. Второй подход решает эту проблему, но заставляет провернуть процесс установки библиотеки на машину каждого члена команды. Впрочем, если вы используете единый корпоративный репозиторий, то и этого маленького неудобства удастся избежать.

Maven Integration for Eclipse (m2e)

Для  интеграции maven в eclipse существует плагин m2eclipse . Он позволяет импортировать существующий maven-проект в eclipse и автоматически перенастраивает eclipse для понимания структуры maven-проекта и использования зависимостей, описанных в pom.xml.

Создание нового maven-проекта

В диалоге для создания новых проектов (File -> New -> Other...  или Ctrl+N) выберите Maven -> Maven Project

Далее, чтобы выбрать проект из существующих архетипов, оставьте галочку Create a simple project снятой. Для создания простого проекта ее следует поставить:

На следующем этапе, для создания простого проекта, необходимо указать по меньшей мере идентификатор группы (чаще всего соответствует корневому пакету, формируемому из имени компании и домена, например ru.dokwork) и идентификатор артефакта, соответствующий названию создаваемого проекта:

В результате будет создан проект со следующей структурой:


Импортирование maven-проекта

В стандартном меню импорта проектов (File -> Import...) выберите Maven -> Existing Maven Projects:


Укажите директорию импортируемого проекта (в которой лежит pom.xml):


В последнем пункте проверяется состояние необходимых плагинов:


На этом импорт проекта окончен.

Получение исходных кодов и документации для используемых библиотек

Еще одно преимущество от использования maven в eclipse - это возможность простого и автоматического получения исходных кодов и документации для используемых в проекте библиотек (естественно при условии, что они есть в репозитории).

Нажмите правой кнопкой мыши на проект в Package Explorer и выберите Maven -> Download JavaDoc для загрузки документации и Maven -> Download Sources для загрузки исходных кодов.

Maven -> Update project

В ряде случаев, при изменении pom.xml, возникает ошибка, требующая обновления проекта:

Для ее устранения нажмите правой кнопкой мыши на проект в Package Explorer и выберите Maven -> Update Project.

Что стоит почитать по maven: 

  1. Apache Maven — основы - отличная вводная статья
  2. Наводим порядок в разработке ПО вместе с maven - цикл статей по maven. Много букв, пользы тоже хватает.
  3. www.apache-maven.ru - русскоязычная документация

3 комментария :

  1. http://black-zorro.com/mediawiki/Наводим_порядок_в_разработке_ПО_вместе_с_maven._Часть_1
    ссылка неверна,ведет на сайт автомобильный

    ОтветитьУдалить
    Ответы
    1. вероятно, сайт погиб, но гугл по запросам с названием статьи выдает копии. Увы не имею возможности проанализировать их и дать качественную ссылку. Буду признателен, если Вы сделаете это.

      Удалить
  2. Спасибо, приятно было почитать вашу статью, добро написано.
    Вот "подбитая" статейка из приложенных Вами материалов:
    http://www.nestor.minsk.by/kg/2009/08/kg90812.html

    ОтветитьУдалить

Ваше мнение мне искренне интересно. Смелее!

Технологии Blogger.