Groovy модули расширения + плагин сборки Maven (толстый кувшин) - PullRequest
0 голосов
/ 27 сентября 2019

Короткая версия

Когда maven assembly plugin создает jar-with-dependencies, он берет первый META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModulefile, который находит и игнорирует все остальные.

Как я могуСобрать проект в виде толстого фляги, чтобы он распознавал все классы расширения Groovy?

Длинная версия

У меня есть проект Groovy, который начинается с этой строки кода:

def today = new Date().clearTime().toTimestamp()

Мой проект собирается и работает нормально.Теперь мне нужно упаковать его в проект конверта - технически создать отдельный проект с зависимостью от моего проекта в виде толстой фляги (jar-with-dependencies, используя maven assembly plugin) - и запустить его из ALM (программного обеспечения для управления тестированием).

Теперь Groovy 2.5.8 состоит из ряда модулей (groovy-dateutil.jar и groovy-sql.jar, среди прочего - больше нет доступного groovy-all.jar), иу каждого модуля есть свой собственный META-INF/groovy/org.codehaus.groovy.runtime.ExtensionModule файл, определяющий классы расширения.

Проблема в том, что когда плагин сборки maven создает JAR-файл с зависимостями, он захватывает первый найденный файл ExtensionModule и игнорирует все остальные.Поэтому, какую бы нестандартную зависимость я ни объявил в начале pom.xml моего проекта, классы расширений этого модуля будут мне доступны, когда я запусту толстый jar, а любые другие вызовут сбой проекта во время выполнения.У меня может быть либо Date().clearTime(), либо Date().toTimestamp(), но не оба: (

Теперь я могу вручную редактировать файл ExtensionModule внутри толстого фляги, добавляя все нужные мне классы расширений. Однако каждыйКогда я внесу изменения в проект mu, мне нужно перестроить его и конвертирующий проект в виде толстой банки (115 Мб), поэтому ручное редактирование файла каждый раз будет утомительным.

Я пробовал использовать сборку mavenплагин с дескриптором контейнера 'file-aggregate', но он добавляет все содержимое каждого файла, а не добавляет классы расширения в строку ExtensionClasses=, поэтому конечный результат тоже не работает. Я также пытался использовать mavenплагин shade, но он сделал то же самое, что и плагин сборки maven. Я не изучил ни одного из его расширенных параметров. Я также слышал, что есть плагин Groovy Eclipse maven.

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

Настройка

-Java 11.0.3

-Groovy 2.5.8

-Spock 1.3-groovy-2.5

-IntelliJ IDEA 2019.1

-Maven 3.5

-Maven compiler plugin

-Maven build helper plugin

-Maven assembly plugin 3.8.1

1 Ответ

0 голосов
/ 29 сентября 2019

Apparetly maven shade plugin может делать именно то, что мне нужно (спасибо @tim_yates за информацию!)

Однако текущая версия плагина не совсем совместима с последней версией Groovy, так как расположениефайлы ExtensionModule были изменены.

Я отправил запрос на извлечение: https://github.com/apache/maven-shade-plugin/pull/28

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