Как мне управлять сторонними зависимостями jar с Eclipse, Maven и Jenkins? - PullRequest
2 голосов
/ 21 декабря 2011

Мы пытаемся управлять проектом, состоящим из нескольких плагинов Eclipse.

Один плагин зависит от стороннего плагина.Он импортирует класс из библиотеки с именем bpmn2.Эта библиотека является файлом jar и НЕ включена в удаленный репозиторий Maven.

Локально, в Eclipse, мы извлекли библиотеку в рабочую область и указали в пути к классам проекта Eclipse.В манифесте плагина явно не указывается зависимость от bpmn2.Который работает локально ...

Мы стараемся использовать Jenkins для непрерывной интеграции.Multi-Plug-in-Project управляется с помощью Maven и нескольких файлов POM с использованием подключаемого модуля Maven tycho.

Проблема в том, что Maven не заботится о локальной библиотеке bpmn2 (конечно),Поэтому мы подумали, что с помощью установки Maven: установка для установки bpmn2 в локальный репозиторий Maven

./mvn install:install-file -Dfile=/home/someUser/bpmn2/org.eclipse.bpmn2_0.7.0.201111021300.jar -DgroupId=org.eclipse.bpmn2 -DartifactId=bpmn2 -Dversion=0.7.0 -Dpackaging=jar -DlocalRepositoryPath=/var/lib/jenkins/localRep/ 

и адаптация соответствующего POM с записью зависимости для библиотеки

<dependencies>
    <dependency>
      <groupId>org.eclipse.bpmn2</groupId>
      <artifactId>bpmn2</artifactId>
      <version>0.7.0</version>
      <type>jar</type>
    </dependency> 
  </dependencies>

будет работать.Но это не так.

Вывод Maven:

[ERROR] Cannot resolve project dependencies:
[ERROR]   Software being installed: modeltype.bpmn2 1.0.0.qualifier
[ERROR]   Missing requirement: modeltype.bpmn2 1.0.0.qualifier requires 'bundle org.eclipse.bpmn2 0.7.0' but it could not be found
[ERROR] 

Вопрос:

Как мы могли бы лучше интегрировать стороннюю библиотеку?Думаю, локальная ссылка на путь к классам не является оптимальным решением для большей картины.Должен ли каждый, кто разрабатывает проект, устанавливать библиотеку bpmn2 и использовать зависимость только в манифесте?

А что мы делаем не так с Maven?Локальный репозиторий -

/var/lib/jenkins/localRep

, и после установки библиотеки в репозиторий казалось, что созданная структура dir в порядке.

/org/eclipse/bpmn2/bpmn2/0.7.0/bpmn2-0.7.0.jar

Может кто-нибудь помочь?

Ответы [ 3 ]

5 голосов
/ 16 июля 2012

У меня был похожий сценарий, когда мне нужно было включить стороннюю библиотеку (не загруженную в репозиторий maven) в веб-проект Maven.

Следующий подход помог нам сделать код переносимым.

Решение:

Создан каталог "lib" в WEB_INF, как показано ниже:

<<Project_Base_Dir>>/src/main/webapp/WEB-INF/lib

Скопировал сторонние JAR-файлы в каталог LIB.

Обновлен файл POM.xml для использования SYSTEMPATH, как показано ниже:

<dependency>
    <groupId>GROUP_ID</groupId>
    <artifactId>ARTIFACT_ID</artifactId>
    <version>VERSION</version>
    <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/<<JAR_FILENAME>></systemPath>
    <scope>system</scope>
</dependency>
5 голосов
/ 21 декабря 2011

Самое простое решение - настроить сервер репозитория для вашей компании и проксировать все ваши звонки через этот сервер.

Я использую Nexus от Sonatype .

Он действует как прокси, когда вам нужно загружать артефакты из удаленных мест, например, maven central, но он также имеет возможность настраивать репозитории для хранения не публично распределенных артефактов.

Весь процесс установки очень хорошо документированздесь -> http://www.sonatype.com/books/nexus-book/reference/.

Обратите внимание, что версия продукта с открытым исходным кодом очень хороша и достаточна для ваших целей.

Просто чтобы быть справедливым, есть конкурирующий продукт, называемый Artifactory,Вы можете прочитать об этом здесь -> http://www.jfrog.com/products.php

0 голосов
/ 21 декабря 2011

Если вы не можете использовать Nexus, вы можете использовать область действия system :

Области зависимости

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

Вы можете использовать его с

Будьте осторожны, это может сделать вашу сборку не переносимой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...