Плагин Maven EAR: добавление сгенерированных ресурсов

В пользовательском плагине Maven я добавляю файл в качестве ресурса, используя addResource из MavenProject.

Это хорошо работает для проектов JAR, но для EAR я вижу, что соответствующий файл копируется в target/classes, а затем игнорируется. В EAR его нет.

Существует свойство earSourceDirectory, которое я, вероятно, могу использовать, чтобы «обмануть» Maven, установив для него значение target/classes, но это кажется неправильным.

Как я могу обрабатывать сгенерированные ресурсы, которые должны быть упакованы в EAR?


person J Fabian Meier    schedule 06.03.2019    source источник
comment
Можете ли вы объяснить, какие сгенерированные ресурсы вам нужно добавить? Я полагаю, вы не ставите их в правильные места?   -  person khmarbaise    schedule 08.03.2019
comment
@khmarbaise Во время сборки мы создаем файл свойств (с различными свойствами сборки) внутри нашего собственного плагина Maven. Этот файл нужно поместить в артефакт (на верхнем уровне). Для этого мы используем addResource. Это работает для банок, но не для ушей. Итак, речь идет о файле свойств, который создается в плагине Maven.   -  person J Fabian Meier    schedule 08.03.2019


Ответы (1)


Плагин Maven EAR полностью игнорирует все каталоги «ресурсов», которые можно настроить для данного артефакта. Вместо этого, как вы упомянули, он полагается исключительно на каталог, на который ссылается свойство earSourceDirectory, где src/main/application является значением по умолчанию. (см. https://maven.apache.org/plugins/maven-ear-plugin/ear-mojo.html#earSourceDirectory)

Поэтому у вас есть два варианта: либо изменить значение этого свойства, чтобы оно указывало на target/classes, как вы предложили, либо сгенерировать свои файлы (как мы сделали для одного проекта) под src/main/application, и тогда они будут автоматически подобраны maven-ear-plugin.

person Dominique Toupin    schedule 19.03.2019
comment
Создание файлов вне target во время сборки кажется плохой идеей. - person J Fabian Meier; 19.03.2019
comment
@JFMeier мы фактически генерируем их на этапе generate-resources, который непосредственно предназначен для этой цели (то есть генерировать ресурсы до их получения в реальном артефакте) - person Dominique Toupin; 19.03.2019
comment
Но когда вы генерируете ресурсы, вы не записываете их в src/main/resources, не так ли? Вы должны записать их в каталог target (или его подкаталог). - person J Fabian Meier; 19.03.2019
comment
Мы генерируем их в src/main/resources и игнорируем с помощью выражения в .gitignore; на самом деле я провел некоторое исследование, и аналогичный случай обсуждался и отвечал здесь: stackoverflow.com/a/25245051/6131265 - person Dominique Toupin; 19.03.2019
comment
Спасибо, но писать src/main/resources во время сборки опасно. Он не будет приведен в порядок при вызове mvn clean, разработчики могут попытаться изменить его вручную, он может случайно попасть в SVN и т. д. Для меня это не вариант. - person J Fabian Meier; 19.03.2019
comment
Почему бы вам также не настроить плагин maven clean? maven.apache.org/plugins/maven-clean- плагин/ - person Dominique Toupin; 19.03.2019
comment
Потому что я стараюсь максимально использовать значения по умолчанию. Особые случаи и нестандартные каталоги ломают ожидания. - person J Fabian Meier; 19.03.2019