То есть мы запускаем 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
Код: Выделить всё
jar:jar - Но тогда вторая проблема заключается в том, что для многомодульных проектов (т. е., где pom верхнего уровня имеет
pom, help:describe выводит * пакет: не определено, и поэтому я не получаю имя плагина. Я полагаю, что это также невозможно для многомодульного проекта, поскольку у вас может быть один модуль, использующий упаковку jar, и второй, который использует войну.
Существует ли что-то подобное? Если нет, могу ли я изучить что-нибудь еще?
Мобильная версия