Имея стороннюю банку, включенную в затененную банку 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 артефакта
  • Как прочитать файл внешних свойств в Maven
  • Отсутствие зависимостей Maven в проекте Eclipse
  • this.getClass (). getClassLoader (). getResource ("...") и NullPointerException
  • Maven GWT 2.0 и Eclipse
  • Найти драйвер Oracle JDBC в репозитории Maven
  • Есть ли способ «сбой быстро» для junit с плагином maven surefire?
  • Как изменить уровень регистрации maven для отображения только предупреждений и ошибок?
  • Команда Maven, чтобы определить, какой файл settings.xml использует Maven
  • Ошибка «Unmappable character for encoding UTF-8»
  • Рекомендации по копированию файлов с Maven
  • Давайте будем гением компьютера.