«1. Проблема и варианты решения

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

Когда это происходит, есть несколько вариантов:

    стиснуть зубы и установить полноценное решение для управления репозиторием, такое как Nexus попытаться загрузить артефакт в один из более авторитетных общедоступных репозиториев установить артефакт локально с помощью maven plugin

Nexus, конечно, более зрелое решение, но и более сложное. Предоставление экземпляра для запуска Nexus, настройка самого Nexus, его настройка и обслуживание могут быть излишними для такой простой проблемы, как использование одного jar-файла. Однако, если этот сценарий — размещение пользовательских артефактов — является распространенным, менеджер репозитория имеет большой смысл.

Загрузка артефакта в общедоступный репозиторий или непосредственно в Maven Central также является хорошим решением, но обычно длительным. Кроме того, библиотека может вообще не поддерживать Maven, что значительно усложняет процесс, поэтому использование артефакта СЕЙЧАС не является реалистичным решением.

Остается третий вариант — добавление артефакта в систему управления версиями и использование плагина maven — в данном случае плагин maven-install-plugin для его локальной установки до того, как он понадобится процессу сборки. Это, безусловно, самый простой и надежный вариант.

2. Установите локальный Jar с помощью maven-install-plugin

Давайте начнем с полной настройки, необходимой для установки артефакта в наш локальный репозиторий:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-install-plugin</artifactId>
   <version>2.5.1</version>
   <configuration>
      <groupId>org.somegroup</groupId>
      <artifactId>someartifact</artifactId>
      <version>1.0</version>
      <packaging>jar</packaging>
      <file>${basedir}/dependencies/someartifact-1.0.jar</file>
      <generatePom>true</generatePom>
   </configuration>
   <executions>
      <execution>
         <id>install-jar-lib</id>
         <goals>
            <goal>install-file</goal>
         </goals>
         <phase>validate</phase>
      </execution>
   </executions>
</plugin>

Теперь давайте разберемся и проанализируем детали эта конфигурация.

2.1. Информация об артефакте

Информация об артефакте определяется как часть элемента \u003cconfiguration\u003e. Фактический синтаксис очень похож на объявление зависимости — элементы groupId, ArtifactId и version.

Следующая часть конфигурации требует определения упаковки артефакта — она указывается как jar.

Затем нам нужно указать местоположение фактического файла jar, который нужно установить — это может быть абсолютный путь к файлу или относительный, используя свойства, доступные в Maven. В этом случае свойство ${basedir} представляет собой корень проекта, а именно место, где находится файл pom.xml. Это означает, что файл someartifact-1.0.jar необходимо поместить в каталог /dependencies/ под корнем.

Наконец, есть несколько других необязательных деталей, которые также можно настроить.

2.2. Выполнение

Выполнение цели файла установки связано с фазой проверки стандартного жизненного цикла сборки Maven. Таким образом, перед попыткой компиляции вам нужно явно запустить этап проверки:

mvn validate

После этого шага будет работать стандартная компиляция:

mvn clean install

Как только этап компиляции будет выполнен, наш someartifact-1.0.jar правильно установлен в нашем локальном репозитории, как и любой другой артефакт, который мог быть получен из центра Maven.

2.3. Генерация POM и предоставление POM

Вопрос о том, нужно ли нам предоставлять файл pom.xml для артефакта или нет, зависит в основном от зависимостей времени выполнения самого артефакта. Проще говоря, если артефакт имеет зависимости времени выполнения от других jar-файлов, эти jar-файлы также должны присутствовать в пути к классам во время выполнения. С простым артефактом это не должно быть проблемой, поскольку он, скорее всего, не будет иметь зависимостей во время выполнения (лист в графе зависимостей).

Параметр generatePom в цели install-file должен быть достаточным для следующих видов артефактов:

<generatePom>true</generatePom>

«

<generatePom>false</generatePom>
<pomFile>${basedir}/dependencies/someartifact-1.0.pom</pomFile>

«Однако если артефакт более сложный и имеет нетривиальные зависимости, то, если этих зависимостей еще нет в пути к классам, их необходимо добавить. Один из способов сделать это — вручную определить эти новые зависимости в pom-файле проекта. Лучшим решением является предоставление пользовательского файла pom.xml вместе с установленным артефактом:

Это позволит Maven разрешать все зависимости артефакта, определенные в этом пользовательском файле pom.xml, без необходимости определять их вручную в основной pom-файл проекта.

3. Заключение