Maven создает много банок из одного модуля

#java #maven #jar #packaging #generated

#java #maven #jar #упаковка #сгенерированный

Вопрос:

У меня есть maven (многомодульный) проект, который содержит что-то вроде IAction . В этом проекте я реализовал около 50 реализаций различных действий. Каждое действие состоит из MyAction.java и MyAction.properties файла.

Я использую Java SPI (java.util.spi) для загрузки всех реализаций во время выполнения. Все это отлично работает, но теперь я хочу упаковать каждый из них Action в один jar, чтобы в итоге у меня получилось 50 jar.

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

Комментарии:

1. вы можете написать скрипт в bash / batch (зависит от вашей ОС) и запустить mvn с некоторым -Dproperty=iterator_index 50 раз, затем использовать build-helper-maven-plugin для компиляции исходных текстов из «src/main/java/org /mycompany/$ {iterator_index}»

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

3. 50 банок… и самый длинный в мире путь к классам. Вы уверены, что хотите это сделать? Действительно ли ваш клиент будет выбирать действия для развертывания на этой основе?

4. Проекты с более чем 50 jar-файлами не редкость. Я использую пользовательский загрузчик классов jar, который заботится об этом, поэтому не беспокоит путь к классу. Речь идет о возможности настраивать установки и позволять тестировать функциональность на индивидуальной основе.

Ответ №1:

Вы можете использовать плагин сборки Maven для создания дополнительных артефактов для сборки модуля. Однако обратите внимание, что вам необходимо добавить эти артефакты в очередь развертывания после их создания, на случай, если вы хотите не только создавать эти артефакты. Этого можно достичь, например, с помощью build-helper-maven-plugin .

Однако, что касается итерации более 50 элементов, вы можете рассмотреть возможность написания собственного специализированного плагина. Существуют дополнительные плагины, которые позволяют выполнять итерацию по другому плагину, но это приведет к сбою вашего POM. Поэтому, если сборка очень специфична, вы могли бы рассмотреть возможность написания отдельного плагина, который специализируется на этой задаче. Вы можете сделать это на чистой Java вместо XML, и это не так сложно, как кажется. Для Maven есть документация и API по умолчанию. И вы можете проверить исходный код названных плагинов о том, как выполнить ваши требования.

Комментарии:

1. Спасибо raphw. Я создал mojo, который выполняет всю работу за меня. Это тоже был приятный опыт обучения 🙂