Интеграция Maven и Non-Maven проектов - PullRequest
8 голосов
/ 25 октября 2009

В настоящее время я работаю над двумя проектами одновременно:

  • Мой главный проект (построен с Maven)
  • Шип проекта с открытым исходным кодом, от которого зависит мой основной проект (не сборка с maven)

Как настроить maven для использования проекта OSS в качестве зависимости с наименьшим количеством трения, учитывая, что я часто разрабатываю эти два в тандеме?

Ответы [ 4 ]

10 голосов
/ 25 октября 2009

Я могу придумать несколько решений:

  1. Создайте существующий проект OSS. Это, конечно, «идеальный» вариант, но зачастую неосуществимый (даже если вы вводите новую систему сборки параллельно существующей). Проект, вероятно, имеет существующую структуру проекта, которая отличается от стандартной компоновки Maven. Изменение существующего макета и сценария сборки может быть нежелательным для разработчиков, адаптация сборки Maven для использования нестандартного макета может быть болезненной. В обоих случаях вы облажались.

  2. Оберните существующую сборку Ant с помощью Maven. Это может быть полезно, если вы хотите включить сборку проекта OSS в жизненный цикл вашего проекта и сделать так, чтобы обе они были собраны за один шаг. , Вы можете проверить этот ответ на SO для получения подробной информации о том, как это сделать.

  3. Используйте Apache Ivy или Maven Ant Task в существующей сборке для создания и установки артефакта Maven в локальном хранилище. Используйте этот артефакт как обычную зависимость в вашем проекте Maven (за исключением того, что вам придется объявлять его транзитивные зависимости вручную). Возможно, это более быстрый и менее навязчивый подход, если создание обоих проектов по отдельности не является проблемой.

Похоже, вы выбрали вариант 3. Я думаю, что это хороший выбор для быстрой победы.

1 голос
/ 25 октября 2009

Я использовал решение задач maven-ant (http://maven.apache.org/ant-tasks/).

Я добавил задачу установки в файл build.xml, который устанавливает скомпилированный файл .jar в локальный репозиторий.

Хотя добавление полноценного pom в проект, безусловно, будет лучшим подходом, это основная часть работы, которая наносит ущерб проекту (где другие пользователи предпочли бы его не использовать).

0 голосов
/ 25 октября 2009

Если у проекта OSS есть зависимости - создайте POM с этими зависимостями (ваш проект будет использовать их как транзитивные зависимости) и установите этот артефакт и pom в локальном хранилище. Если у проекта OSS нет никаких других зависимостей, это еще проще - POM генерируется автоматически во время установки.

Для обоих случаев используйте maven-install-plugin .

mvn install:install-file -Dfile=your-artifact-1.0.jar \
                     [-DpomFile=your-pom.xml] \
                     [-Dsources=src.jar] \
                     [-Djavadoc=apidocs.jar] \
                     [-DgroupId=org.some.group] \
                     [-DartifactId=your-artifact] \
                     [-Dversion=1.0] \
                     [-Dpackaging=jar] \
                     [-Dclassifier=sources] \
                     [-DgeneratePom=true] \
                     [-DcreateChecksum=true]
0 голосов
/ 25 октября 2009

Я думаю, что вам, вероятно, нужно прикусить пулю и настроить POM для вашего дерева проекта OSS. Это болезненная часть (поскольку вам нужно будет выследить детали указания путей к ресурсам для различных подключаемых модулей в зависимости от типа приложения OSS (например, веб и т. Д.)). Хорошей новостью является то, что это одноразовое усилие.

Как только это будет сделано, ваш основной проект может ссылаться на (обернутый) проект OSS как зависимость. Здесь (multi maven) многопроектная структура будет применяться.

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