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 .