【问题标题】:How can I exclude *.DSA and *.SF files from shaded jar?如何从阴影 jar 中排除 *.DSA 和 *.SF 文件?
【发布时间】:2013-07-13 14:07:26
【问题描述】:

我在 pom.xml 中有一个部分

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

我想从最终的 jar 中排除 *.SF 和 *.DSA 文件。 但我收到以下消息:

[INFO] No artifact matching filter *:*

并且不排除文件。 有谁知道如何克服它?

【问题讨论】:

标签: java maven maven-shade-plugin


【解决方案1】:

我遇到了同样的问题。通过使我的工件选择器更具体来修复它,例如

<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>

【讨论】:

  • 试过了(没有 ManifestResourceTransformer),对我不起作用,BCKEY.* 文件仍然存在。我也尝试过工件*:*:*:*。这是一个旧答案,Maven 语法从那以后发生了变化吗?
  • @SevaAlekseyev,您找到解决方案了吗?以上解决方案对我不起作用?
  • 将配置移出执行对我有用stackoverflow.com/a/34740005/673826
【解决方案2】:

其实你可以做全局过滤而不需要指定组ID,你只需要使用正确的通配符语法。例如,如果要从 jar 中排除所有 *.RSA 文件,请将 artifactId 指定为 *:*:*:*

<filters>
    <filter>
        <artifact>*:*:*:*</artifact>
        <excludes>
            <exclude>*.RSA</exclude>
        </excludes>
    </filter>
</filters>

【讨论】:

  • 不排除META-INF/ECLIPSE.SFMETA-INF/ECLIPSE.RSA。更有趣的是我根本没有用eclipse,我用的是Intellij。
  • 这让我可以从 jar 中删除一个讨厌的 license.txt 文件,只需包含 LICENSE.txt
【解决方案3】:

这是一个老问题,但没有一个答案对我有用。将它们结合起来:

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

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 2013-05-04
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多