Ленивые зависимости от мультипроектного проекта Maven - PullRequest
3 голосов
/ 14 октября 2010

Мы рассматриваем возможность использования Maven для крупной многопроектной сборки, чтобы дать вам представление о размере, некоторые из подпроектов содержат несколько миллионов строк кода.

Идеальная структура была бы чем-токак:

  • projectA
    • module1
    • module2
  • projectB
    • moduleAlpha (зависит от moduleBeta)
    • moduleBeta (зависит от проекта A: module1)
  • ...

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

Добавление общего корня проекта позволяет выразить зависимостикак описано, например:

  • project-root
    • projectA
      • module1
      • module2
    • projectB
      • moduleAlpha (зависит от moduleBeta)
      • moduleBeta(зависит от проекта A: module1)
    • ...

Но вынуждает вас строить из проекта root.Помните, что это очень большой проект, и полная сборка не всегда желательна.

Большинство команд работают на уровне projectX , некоторые даже на уровне moduleX .

Нам нужно иногда создавать против созданного артефакта (это jar, созданный module1 ), в других случаях мы хотим построить из исходного кода.

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

Я представляю собой репозиторий артефактов типа, который создает артефакт, когда он требуется.Например, сделать projectA хранилищем артефактов, на который ссылается projectB .Когда вам по какой-то причине нужно перестроить артефакт projectA , вы можете просто удалить банку.

Реализовано ли это как часть Maven или как плагин?Если нет, возможно ли это реализовать?

1 Ответ

3 голосов
/ 14 октября 2010

Нам нужно иногда строить на основе сгенерированного артефакта (то есть файла jar, созданного module1), в других случаях мы хотим собирать его из исходного кода.

Я неЗдесь вы не увидите какой-либо конкретной проблемы:

  • , если вы хотите построить против двоичных зависимостей (jars), просто создайте артефакт, над которым вы работаете (и позвольте Maven разрешать и использовать двоичные зависимости)
  • , если вы хотите построить на основе исходного кода, используйте сборку реактора и дополнительные параметры реактора, например, для построения зависимостей moduleAlpha и moduleAlpha:

    mvn -pl moduleAlpha -am
    

То, что я представляю, - это репозиторий артефактов типов, который создает артефакт, когда он требуется.Например, делая projectA хранилищем артефактов, на который ссылается projectB.Когда вам по какой-то причине нужно перестроить артефакт ProjectA, вы можете просто удалить банку.

Я не уверен, что понимаю, о чем вы говорите, и удалите JAR не звучит как хорошая идея.

Вам нужен непрерывный процесс сборки, который собирает весь проект как можно чаще, чтобы создать SNAPSHOT из всех модулей и развернуть их в корпоративном хранилище.Это просто путь.

И чтобы сделать сборку максимально быстрой, я бы подумал об использовании Maven 3.x и опции параллельных сборок .

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