Сборка Maven 2 с зависимостями: jar under scope «system» не входит в комплект

Я использую плагин maven-assembly, чтобы создать банку моего приложения, включая его зависимости следующим образом:

 macosx  tar.gz dir     *:jar  lib    

(Я пропустил некоторые другие вещи, которые не связаны с вопросом)

Пока это отлично работает, потому что он создает каталог lib со всеми зависимостями. Однако недавно я добавил новую зависимость, область видимости которой является system , и она не копирует ее в каталог вывода lib . я должен упустить что-то основное здесь, поэтому я обращаюсь за помощью.

Зависимость, которую я только что добавил:

  sourceforge.jchart2d jchart2d 3.1.0 system ${project.basedir}/external/jchart2d-3.1.0.jar  

Единственный способ, которым я мог включить эту зависимость, заключался в добавлении следующего элемента сборки:

   external/jchart2d-3.1.0.jar lib   

Однако это заставляет меня менять pom и файл сборки всякий раз, когда эта банка переименовывается, если когда-либо. Кроме того, это просто неправильно.

Я пробовал с runtime в dependencySets и sourceforge.jchart2d:jchart2d без везения.

Итак, как вы включаете банкомат с system в свой файл сборки в maven 2?

большое спасибо

Я не удивлен, что зависимости в области системной области не добавляются (ведь зависимости с областью системы должны быть явно предоставлены по определению). Фактически, если вы действительно не хотите размещать эту зависимость в своем локальном репозитории (например, потому что вы хотите распространять ее как часть своего проекта), это то, что я сделал бы:

  • Я бы поставил зависимость в «repository файловой системы», который был локальным для проекта.
  • Я бы объявил этот repository в моем pom.xml следующим образом:

       my file://${basedir}/my-repo   
  • Я бы просто объявил артефакт без system охвата, это просто источник неприятностей:

      sourceforge.jchart2d jchart2d 3.1.0  

Я не уверен на 100%, что это подойдет вашим потребностям, но я думаю, что это лучшее решение, чем использование области системы.

Обновление: я должен был упомянуть об этом в своем первоначальном ответе, и теперь я его исправляю. Чтобы установить стороннюю библиотеку в файловом репозитории, используйте install:install-file с параметром localRepositoryPath :

 mvn install:install-file -Dfile= \ -DgroupId= \ -DartifactId= \ -Dversion= \ -Dpackaging= \ -DlocalRepositoryPath= 

Вы можете вставить это как в оболочку * nix. В windowsх удалите « \ » и поместите все в одну строку.

Btw вы можете автоматизировать его и сделать его частью вашей сборки maven. Следующее установит вашу банку в ваш локальный repository перед компиляцией:

   org.apache.maven.plugins maven-install-plugin   hack-binary validate  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     по   org.apache.maven.plugins maven-install-plugin   hack-binary validate  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Я нахожу легкое решение, если вы создаете банку

  org.apache.maven.plugins maven-war-plugin 2.1.1    dependencies/mydep WEB-INF/lib true  **/*.jar      в  org.apache.maven.plugins maven-war-plugin 2.1.1    dependencies/mydep WEB-INF/lib true  **/*.jar      

Вы также можете справиться с этим, добавив дополнительный набор зависимостей в свои зависимости.

  system  *:jar  lib  в  system  *:jar  lib  

Лучше всего использовать диспетчер репозитория (например, Nexus, Artifactory, Archiva) и установить такую ​​зависимость в конкретном репозитории. После этого вы можете использовать такие вещи, как простая зависимость. Это упростит вашу жизнь.

Документы: https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html

Простым решением для этого является добавление его в локальный repository maven

Один из способов сделать это – установить команды mvn install, как это было предложено в предыдущем сообщении.

Еще один простой способ: 1) В своем затмении правой кнопкой мыши выберите вариант выбора Maven. 2) Выберите «Установить или развернуть артефакт» в репозитории maven и нажмите «Далее». 3) Установите флажок рядом с файлом Artifact и выберите свой файл jar. 4) Введите GroupId и ArtifactId и убедитесь, что вы создали команду pom & create checksum, а упаковка – jar

Нажмите на финиш, Валла! ваша работа завершена, банку добавляется в ваш локальный repository, который вы можете определить в каталоге settings.xml или m2

Теперь просто добавьте простую зависимость от maven в соответствии с версией GroupId, ArtifactId & jar, которую вы ввели в соответствии с импортом, и вот что ваша внешняя банка будет упакована maven.

Отредактировано: Извините, что я не осознал, что alx также упомянул об обходном пути чистого жизненного цикла.

  org.apache.maven.plugins maven-install-plugin   hack-binary clean  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     по  org.apache.maven.plugins maven-install-plugin   hack-binary clean  ${basedir}/lib/your-lib.jar default your-group your-artifact 0.1 jar true   install-file     

Основываясь на решении, предоставленном alx, вы можете выполнить шаг установочного файла на чистой фазе. но поскольку чистая фаза не находится в жизненном цикле по умолчанию, вы должны выполнить mvn clean в первый раз, чтобы гарантировать, что банка готова в локальном репо.

ex: mvn clean; пакет mvn

он работал более легким способом по моему решению:

удалить из своей зависимости:

  tiago.medici eureka 0.0.1  

Затем добавьте maven-install-plugin в pom.xml.

  org.apache.maven.plugins maven-install-plugin   install-external clean  ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true   install-file     по  org.apache.maven.plugins maven-install-plugin   install-external clean  ${basedir}/external/tiago.medici-0.0.1.jar default tiago.medici eureka 0.0.1 jar true   install-file     
  • Запустить одно исполнение плагина Maven?
  • Давайте будем гением компьютера.