Установите локальную банку с Maven

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

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

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

  • укусить пулю и установить полноценное управление хранилищем

решение such as Nexus ** попытайтесь загрузить артефакт в одну из наиболее авторитетных публичных

хранилища установить артефакт локально ** с помощью плагина maven

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

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

Это оставляет третий вариант - добавление артефакта в систему управления версиями и использование плагина maven - в этом случае the 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. Информация об артефакте

Информация об артефакте определяется как часть элемента <configuration> . Фактический синтаксис очень похож на объявление зависимости - элементы groupId , artifactId и version .

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

Затем нам нужно указать location фактического файла jar, который нужно установить - это может быть абсолютный путь к файлу или относительный, используя https://cwiki.apache.org/confluence/display/MAVEN/Maven Руководство по свойствам[свойства]доступны в Maven . В этом случае свойство $ \ {basedir} представляет корень проекта, а именно местоположение, в котором находится файл pom.xml . Это означает, что файл someartifact-1.0.jar необходимо поместить в каталог /dependencies/ в корневом каталоге.

Наконец, есть несколько других optional details , которые также можно настроить.

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

Выполнение install-file target связано с validate этапом из стандартного Maven build lifecycle . Таким образом, прежде чем пытаться скомпилировать - вам нужно явно запустить этап проверки:

mvn validate

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

mvn clean install

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

2.3. Генерация pom против поставки pom

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

Параметр generatePom в цели install-file должен подойти для таких типов артефактов:

<generatePom>true</generatePom>

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

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

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

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

В этой статье рассказывается, как использовать jar, который не размещен в проекте Maven, путем его локальной установки с помощью maven-install-plugin .