Имея стороннюю банку, включенную в затененную банку Maven, не добавляя ее в локальный repository

Я уже нашел ответ здесь, в Stack Overflow, как включить сторонний JAR в проект, не устанавливая его в «локальный repository»:

Можно ли добавить jars в maven 2 build classpath без их установки?

Но, когда я использую Maven Shade Plugin для создания JAR, который также включает все зависимости проекта, сторонний JAR не включается автоматически.

Как я могу заставить Maven Shade Plugin добавить такой сторонний JAR в затененный JAR?


В соответствии с полученным ответом я заработал. Что я сделал, добавил этот fragment к началу моего pom.xml:

  repo file://${basedir}/repo   

Затем добавлена ​​зависимость для моего проекта, а также pom.xml:

   dummy dummy 0.0.0 compile   

А затем запустил командную строку, чтобы добавить пакет в «repo»:

 mvn org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file -Dfile=.jar -DgroupId=dummy -DartifactId=dummy -Dversion=0.0.0 -Dpackaging=jar -DlocalRepositoryPath=`pwd`/repo/ 

(Не уверен, что путь репо должен быть полным путем, но не хотел рисковать.)

Содержимое подкаталога repo теперь:

 repo/dummy/dummy/0.0.0/dummy-0.0.0.jar repo/dummy/dummy/0.0.0/dummy-0.0.0.pom repo/dummy/dummy/maven-metadata-local.xml 

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

Но, когда я использую Maven Shade Plugin для создания JAR, который также включает все зависимости проекта, сторонний JAR не включается автоматически.

Да, потому что предполагается, что зависимые от области действия system всегда присутствуют (это именно то, что касается области системы), поэтому они не будут включены. Люди на самом деле не понимают, каковы зависимости системы, они просто продолжают злоупотреблять ими (да, это злоупотребление), а затем получают побочные эффекты и удивляются, почему (как указал Брайан в своем ответе ).

Я уже много раз писал много , много раз об этом здесь, на SO, и в 99% случаев следует избегать зависимостей в system . И я повторю то, что мини-гид Dependency Scopes говорит еще раз:

  • system : эта зависимость требуется на некоторых этапах жизненного цикла вашего проекта, но зависит от конкретной системы. Использование этой области не рекомендуется: это считается «расширенным» видом функции, и ее следует использовать только тогда, когда вы действительно понимаете все последствия ее использования, которые могут быть чрезвычайно сложными, если их вообще невозможно определить количественно. Этот объем по определению делает вашу сборку не переносной. Это может быть необходимо в некоторых случаях. Область системы включает элемент который указывает на физическое местоположение этой зависимости на локальном компьютере. Таким образом, он используется для обозначения какого-либо артефакта, ожидаемого на данном локальном компьютере, а не в репозитории; и путь которого может изменяться от машины к машине. Элемент systemPath может ссылаться на переменные среды на своем пути: ${JAVA_HOME} например.

Таким образом, вместо использования области system :

  • Добавьте свои библиотеки в локальный repository через install:install-file . Это быстрый и грязный способ заставить все работать, это может быть вариант, если вы один, но он делает вашу сборку не переносной.
  • Установите и запустите «корпоративный repository», например Nexus, Archiva или Artifactory, и добавьте свои библиотеки через deploy:deploy-file . Это идеальный сценарий.
  • Установите файловый repository, как описано в этом предыдущем ответе, и разместите там свои библиотеки. Это лучший компромисс, если у вас нет корпоративного репозитория, но вам нужно работать в команде и не хотите жертвовать переносимостью.

Пожалуйста, прекратите использование области system .

Плагин Maven addjars решает эту проблему – см.

http://code.google.com/p/addjars-maven-plugin/wiki/UsagePage

Используется для включения моей библиотеки со всеми банками. то есть:

    ${project.basedir}  lib/*.jar      org.apache.maven.plugins maven-shade-plugin 2.3  false    package  shade       в    ${project.basedir}  lib/*.jar      org.apache.maven.plugins maven-shade-plugin 2.3  false    package  shade       
  • Maven GWT 2.0 и Eclipse
  • Почему у Maven такая плохая репутация?
  • Сборка Maven 2 с зависимостями: jar under scope «system» не входит в комплект
  • Создание исполняемого банку с maven?
  • Ошибка «Unmappable character for encoding UTF-8»
  • Различия в плагинах Maven JAXB
  • Есть ли простой способ удалить неиспользуемые зависимости из maven pom.xml?
  • Использование Maven для множественной среды развертывания (производство / разработка)
  • Как настроить JPA для тестирования в Maven
  • Как создать исполняемый JAR с зависимостями с помощью Maven?
  • Модули Maven + Создание единого конкретного модуля
  • Давайте будем гением компьютера.