Мультимодули maven и обход системы жизненного циклаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Мультимодули maven и обход системы жизненного цикла

Сообщение Anonymous »

Я пытаюсь создать систему CI, которая выполняет каждую часть этапа сборки maven в отдельном задании.
То есть мы запускаем mvn compiler:compile compiler:testCompile в одном задании, затем mvn Surefire:test в другом и, наконец, mvn jar:jar Deploy:deploy в последнем. Это обязательное условие, я не могу этого не сделать. Контекст таков, что мы создаем библиотеку фрагментов CI, которые могут использоваться различными проектами, поэтому я не знаю подробностей проектов, в которых это будет выполняться; некоторые создают библиотеку, упакованную в виде jar, некоторые создают программу, также упакованную в jar, некоторые создают войну и т. д.
Изначально я использовал имена жизненного цикла, а не конкретные имена плагинов (например, mvn package, mvnverify и т. д.), и добавлял параметры командной строки (например, -DskipTests), чтобы он не выполнял то, что он выполняет в задании. здесь не предполагается делать, но это не всегда срабатывало; жизненные циклы всегда вызывают все цели, которые предшествуют ему, и иногда это приводит к тому, что вещи компилируются там, где их не должно быть, что вызывает проблемы.
Поэтому я пытаюсь перейти к прямому вызову плагинов. То есть:
  • Вместо mvn package -DskipTests для компиляции я теперь запускаю mvn compiler:compile compiler:testCompile jar:jar
  • Вместо mvnverify я теперь запускаю mvn Surefire:test
  • Вместо mvn Deploy я теперь запускаю mvn jar:jar Deploy
Это работает, но я столкнулся с двумя проблемами:
  • не всегда корректен; для войн это должно быть war:war и т. д. Мне удалось решить эту проблему, выполнив packager=$(mvn help:describe -Dcmd=package|grep '^\* package'|cut -d' ' -f3), а затем используя $packager вместо jar:jar
  • Но тогда вторая проблема заключается в том, что для многомодульных проектов (т. е., где pom верхнего уровня имеет
    pom, help:describe выводит * пакет: не определено, и поэтому я не получаю имя плагина. Я полагаю, что это также невозможно для многомодульного проекта, поскольку у вас может быть один модуль, использующий упаковку jar, и второй, который использует войну.
Поэтому я думаю, мне что-то нужно заменить пакет mvn, который только вызывает соответствующий jar:jar или war:war или любой другой плагин.
Существует ли что-то подобное? Если нет, могу ли я изучить что-нибудь еще?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»