Перезаписать файл ресурсов с помощью плагина сборки maven

Я использую плагин maven-assembly с «jar-with-dependencies» для упаковки jar. Есть 2 артефакта зависимостей, имеющих log-back.xml. Второй артефакт зависит от первого. Я хочу иметь log-back.xml второго артефакта в последней банке, но он всегда содержит log-back.xml первого. Итак, как я могу контролировать это?

Спасибо


person Loc Phan    schedule 17.05.2011    source источник
comment
Вот ответ для одного конкретного случая stackoverflow.com/a/24578209/1531945 В общем, манипулирование dependencySets и unpackOptions должно выполняться Хитрость.   -  person Konstantin Pelepelin    schedule 31.10.2016


Ответы (3)


Для этого можно использовать unpackOptions. Попробуйте что-то вроде следующего:

<assembly>
...
    <dependencySets>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>${groupId}:${artifact.whose.logback.is.to.be.excluded} </include>
            </includes>
            <unpack>true</unpack>
            <unpackOptions>
                <excludes>
                    <exclude>**/logback.xml</exclude>
                </excludes>
            </unpackOptions>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <excludes>
                <exclude>${groupId}:${artifact.whose.logback.is.to.be.excluded}</exclude>
            </excludes>
            <unpack>true</unpack>
        </dependencySet>
    </dependencySets>
</assembly>
person Raghuram    schedule 17.05.2011
comment
Я понял вашу идею, но она не работает. logback.xml не включен в финальную банку. Возможно, плагин расширял банки, затем упаковывал их фильтром (исключая logback.xml) - person Loc Phan; 19.05.2011
comment
У меня это работает только в первой сборке после того, как я отредактировал Assembly.xml. Если я снова запущу сборку, она перестанет работать. Кажется, порядок, в котором копируются ресурсы, не определен, и поэтому нет гарантии, что это сработает. - person thegeko; 05.10.2015

(С последней версией maven-assembly-plugin на данный момент: 3.0.0)

У меня была такая же проблема с сборкой сборки.

У меня было две зависимости с одним и тем же файлом свойств, но с другим содержимым (один хороший, а другой перезаписывал первый с отсутствующими объявлениями).

Проблема заключалась в том, что у меня, наконец, был плохой файл конфигурации, заменяющий другой в моей банке сборки.

Единственное самое чистое решение, которое я нашел для перезаписи файла, заключалось в следующем:

1 - Добавьте хороший файл, который я хотел сохранить для сборки в моем проекте: пример: src/main/resources/META-INF/services/myfileWhichOverwriteTheBadDependenciesRessources.xml

2 - Добавьте набор файлов с параметром «filtered», установленным на «true» в моем дескрипторе сборки:

    <fileSet>
        <directory>${project.main.resources}/META-INF</directory>
        <outputDirectory>META-INF</outputDirectory>
        <filtered>true</filtered>
    </fileSet>

(в моем случае для свойства «project.main.resource» установлено значение «src/main/resources»)

person Charles Vuillecard    schedule 27.07.2017
comment
Вы можете использовать обратные кавычки `, чтобы пометить вещи как code в своем ответе, например. тогда имя файла будет более читаемым. - person mbo; 27.07.2017

Является ли первый артефакт модулем вашего собственного проекта? Если это так, вы можете исключить файл log-back.xml в разделе ресурсов pom.xml.

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <excludes>
      <exclude>log-back.xml</exclude>
    </excludes>
  </resource>
  ...
</resources>

Однако это работает только в том случае, если этому модулю не требуется файл log-back.xml сам по себе, когда он создан вне области действия общего jar-файла.

person Frank    schedule 17.05.2011
comment
К сожалению, я не могу изменить первый артефакт. - person Loc Phan; 17.05.2011
comment
О, хорошо, тогда я думаю, что это будет сложно. Насколько я знаю, вы можете исключать только транзитивные зависимости зависимостей, но не содержимое, которое входит в состав зависимости. - person Frank; 17.05.2011