Использовать локальный jar как артефакт в плагине зависимостей maven?

1

У нас есть проект maven, в котором мы используем некоторые артефакты, которых нет в каких-либо удаленных репозиториях. Они включены в наш проект в какой-то каталог, скажем /lib, как скомпилированные.jar файлы. Некоторые из них являются "равными" зависимостями, которые мы можем использовать из /lib с помощью scope system + systemPath, однако есть один артефакт, который должен использоваться с целью распаковки maven-dependency-plugin. Соответствующая часть pom.xml выглядит так:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
       <execution>
           <id>unpack-resources</id>
           <phase>generate-resources</phase>
           <goals>
               <goal>unpack</goal>
           </goals>
           <configuration>
               <artifactItems>
                   <artifactItem>
                       <groupId>xxx.yyy.zzz</groupId>
                       <artifactId>ourartifact</artifactId>
                       <outputDirectory>${target.directory}/somedir</outputDirectory>
                       <includes>
                           files1/**,files2/**,files3/**
                       </includes>
                   </artifactItem>
               </artifactItems>
           </configuration>
       </execution>
   </executions>
</plugin>

Однако это по-прежнему пытается протянуть к удаленному репозиторию и извлечь из него артефакт, что, конечно, не удастся. Можем ли мы каким-то образом добиться того, чтобы этот артефакт также был получен из /lib?

  • 0
    Рассматривали ли вы возможность установить локальный сервер Nexus и поместить в него свои локальные артефакты?
  • 0
    Да, в настоящее время мы решаем эту проблему, просто устанавливая все артефакты в локальные репозитории maven, но в долгосрочной перспективе ожидается разрешение через описанный выше способ, поскольку ограничения проекта не позволят установить артефакты в удаленный репозиторий.
Теги:
maven
jar
maven-plugin

1 ответ

1
Лучший ответ

Вместо того, чтобы извлекать из /lib, а если настроить собственный Nexus/Artifactory/etc... немного сейчас, вы можете добавить банку в свой локальный репозиторий. Каждый из них должен был бы сделать это на своем собственном компьютере, но после этого он будет доступен для всех проектов, построенных на maven, на этой машине, поэтому вам не нужно будет иметь копию /lib для каждого проекта. Если вы компилируете этот банку самостоятельно, и это проект maven, вы можете выполнить "mvn install" и установить его на локальное репо. Обратите внимание, что пакет mvn не будет установлен в локальное репо.

Если это сторонняя банка, вы можете использовать mvn install: install-file для этого. Для этого следуйте инструкциям на странице https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html.

Надеюсь это поможет!

Обновление: по локальному репозиторию я могу иметь в виду иначе, чем вы упомянули в своем комментарии, - я имею в виду локальный репозиторий на каждом пользовательском компьютере, в отличие от сервера репозитория, который является локальным для вашей интрасети. Извините, если это вызвало путаницу :)

  • 0
    Вы также можете использовать maven-install-plugin для автоматического развертывания системного jar-файла в локальном репозитории как часть процесса сборки, вместо того, чтобы делать это вручную.
  • 0
    Спасибо, в конце концов мы решили пойти с этим решением тоже

Ещё вопросы

Сообщество Overcoder
Наверх
Меню