Добавление дополнительных ресурсов в maven pom

У меня есть супер pom, в котором я указываю каталог ресурсов для ресурсов. В одном из моих проектов мой pom расширяет этот супер-пом, и я хотел бы добавить дополнительный ресурс. Я пробовал:

    <resources>
        <resource>
            <targetPath>/</targetPath>
            <directory>additionalDir</directory>                
        </resource>
    </resources>

Но это приводит к тому, что only дополнительный Dir находится в ресурсах и не включает ресурсы супер pom. Есть ли способ расширить ресурсы суперпома?

Ответ 1

Ожидается поведение, которое вы описали.

Помните, что ваш супер POM наследуется от Maven default POM и почти любой плагин, который вы определяете в своем pom, фактически отменяет настройку в default POM. Например, чтобы включить фильтрацию по умолчанию, вы должны указать путь в своем POM. Вы делаете это:

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
  </resource>
</resources>

Не это:

<resources>
  <resource>
    <filtering>true</filtering>
  </resource>
</resources>

Каталог по умолчанию для вас не пузырится, даже если вы указали его там. Для вас может быть специальное MOJO, но я не смог найти его.

Ответ 2

См. build-helper-maven-plugin usage страница.

Ответ 3

Да, maven переопределяет родительские ресурсы POM при переопределении новой секции ресурсов.

Однако простой способ добавления ресурсов -

  • Удалить раздел ресурсов из POM
  • Показать Эффективный POM
  • Скопируйте ресурсы из своего эффективного ПОМ в свой проект.
  • Заменить абсолютные пути с относительными
  • Добавьте дополнительные ресурсы

Ответ 4

Я знаю, что этот вопрос довольно старый, но, возможно, кто-то найдет этот вопрос полезным:

Вы можете легко сделать это, используя плагин ресурсов Maven.

По сути, то, что он делает по умолчанию (вызывая цель resources: resources), перемещает содержимое всех каталогов, перечисленных в разделе build/resources, с помощью объявленного фильтра в ${project.build.outputDirectory} Если вы сейчас хотите добавить некоторые дополнительные ресурсы, не влияя на эти разделы, вы можете просто переместить туда сами. Нет, это не значит перетаскивать его туда.

Maven Resources Plugin предоставляет цель под названием resources:copy-resources которая делает именно это для вас: копирование файлов с использованием фильтров из одного места в другое или, как указано в документе плагина:

Вы можете использовать ресурсы копирования mojo для копирования ресурсов, которые не находятся в макете по умолчанию maven или не объявлены в элементе build/resources, и присоединить их к фазе

Очевидное преимущество по сравнению с помощником сборки, которое предлагается в других решениях, заключается в том, что, хотя помощник сборки может выполнять действия только на этапе generate-sources, плагин ресурсов работает на любой стадии. (Хотя было бы целесообразно выполнить его до стадии упаковки)

Полный пример того, как это использовать, приведен здесь, как часть страницы проекта плагинов.

Это копирует содержимое каталога ресурсов, не указанного в списке " src/non-packaged-resources ", в " ${basedir}/target/extra-resources ". Но поскольку плагин jar (который создает архив jar) в основном создает zip-архив каталога " ${project.build.outputDirectory} ", вы можете разместить его там.