Как исключить файлы *.DSA и *.SF из затененной банки?

У меня есть раздел в pom.xml

 <filters>
   <filter>
      <artifact>*:*</artifact>
         <excludes>
            <exclude>META-INF/*.SF</exclude>
            <exclude>META-INF/*.DSA</exclude>
         </excludes>
   </filter>
</filters>

Я хочу исключить файлы *.SF и *.DSA из финальной банки. Но я получаю следующее сообщение:

[INFO] No artifact matching filter *:*

и файлы не исключаются. Кто-нибудь знает, как это побороть?


person Dzmitry Kashlach    schedule 15.07.2013    source источник
comment
Связано: исключение для генерации тени Maven   -  person blong    schedule 15.04.2014


Ответы (3)


У меня такая же проблема. Это было исправлено, сделав мой селектор артефактов более конкретным, например.

<artifact>bouncycastle:*</artifact>

Весь блок выглядит так:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.mycompany.MainClass</mainClass>
                    </transformer>
                </transformers>
                <filters>
                    <filter>
                        <artifact>bouncycastle:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>standalone</shadedClassifierName>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
person Joe Coder    schedule 15.07.2013
comment
Пробовал (без ManifestResourceTransformer), у меня не сработало, файлы BCKEY.* все еще там. Я тоже пробовал артефакт *:*:*:*. Это старый ответ, изменился ли синтаксис Maven с тех пор? - person Seva Alekseyev; 26.10.2016
comment
@SevaAlekseyev, ты нашел решение? Приведенное выше решение не работает для меня? - person tryingToLearn; 15.03.2018
comment
Перемещение конфигурации из выполнения помогло мне stackoverflow.com/a/34740005/673826 - person mlt; 31.01.2021

На самом деле вы можете выполнять глобальную фильтрацию без необходимости указывать идентификатор группы, вам просто нужно использовать правильный синтаксис подстановочных знаков. Например, если вы хотите исключить все файлы *.RSA из jar-файла, укажите идентификатор артефакта как *:*:*:*.

<filters>
    <filter>
        <artifact>*:*:*:*</artifact>
        <excludes>
            <exclude>*.RSA</exclude>
        </excludes>
    </filter>
</filters>
person Tim Veil    schedule 16.09.2014
comment
Это не исключает META-INF/ECLIPSE.SF и META-INF/ECLIPSE.RSA. Что еще более интересно, так это то, что я вообще не использую eclipse, я использую Intellij. - person Searene; 29.11.2016
comment
Это позволило мне удалить надоедливый файл license.txt из банки, просто включив строку «exclude›LICENSE.txt»/exclude› - person Josh Gager; 31.03.2017

Это старый вопрос, но ни один из ответов не помог мне. Их объединение сделало:

<filters>
    <filter>
        <artifact>*:*:*:*</artifact>
        <excludes>
            <exclude>META-INF/*.RSA</exclude>
            <exclude>META-INF/*.SF</exclude>
            <exclude>META-INF/*.DSA</exclude>
        </excludes>
    </filter>
</filters>
person Joe Driscoll    schedule 23.07.2019