Java maven依赖插件不排除匹配文件

Java maven依赖插件不排除匹配文件,java,maven,jar,maven-3,maven-compiler-plugin,Java,Maven,Jar,Maven 3,Maven Compiler Plugin,我正试图从bouncycastle中删除.SF、.DSA和.RSA文件,以便将jar包含到我的jar中并远程部署它。我发现我需要使用maven依赖插件,但是排除似乎并不是真的…排除。有点违背了整个目的 如果我解压缩文件,签名的密钥仍然在那里,特别是在META-INF目录中。如果我手动删除它们并重新jar,应用程序就会工作。我只需要弄清楚如何自动排除这些文件 下面是我的POM文件,有人能看到我哪里出了问题以及如何修复它吗 <?xml version="1.0" encoding="UTF-8

我正试图从bouncycastle中删除.SF、.DSA和.RSA文件,以便将jar包含到我的jar中并远程部署它。我发现我需要使用maven依赖插件,但是排除似乎并不是真的…排除。有点违背了整个目的

如果我解压缩文件,签名的密钥仍然在那里,特别是在META-INF目录中。如果我手动删除它们并重新jar,应用程序就会工作。我只需要弄清楚如何自动排除这些文件

下面是我的POM文件,有人能看到我哪里出了问题以及如何修复它吗

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycom</groupId>
<artifactId>MyApp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.19</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.3.1</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-sns</artifactId>
        <version>1.10.50</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-core</artifactId>
        <version>1.11</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>1.11</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-elasticsearch</artifactId>
        <version>1.10.35</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <jdk.version>1.8</jdk.version>
</properties>
<build>
    <!-- Declare Maven plugins -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.10</version>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                    <configuration>
                        <excludes>**/*.SF</excludes>
                        <excludes>**/*.DSA</excludes>
                        <excludes>**/*.RSA</excludes>
                        <outputDirectory>${project.build.directory}/classes</outputDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- Set a compiler level -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5</version>
            <configuration>
                <source>${jdk.version}</source>
                <target>${jdk.version}</target>
            </configuration>
        </plugin>
        <!-- Maven Shade Plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.3</version>
            <executions>
                <!-- Run shade goal on package phase -->
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <!-- add Main-Class to manifest file -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.mycom.MyApp</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<name>MyApp</name>

4.0.0
com.mycom
MyApp
1.0-快照
罐子
泽西岛
泽西岛客户
1.19
罐子
com.google.code.gson
格森
2.3.1
罐子
亚马逊网站
aws java sdk sns
1.10.50
log4j
log4j
1.2.17
罐子
org.apache.tika
提卡岩芯
1.11
罐子
org.apache.tika
提卡解析器
1.11
罐子
亚马逊网站
aws java sdk elasticsearch
1.10.35
org.elasticsearch
弹性搜索
2.1.1
UTF-8
1.8
1.8
1.8
org.apache.maven.plugins
maven依赖插件
2.10
解包依赖项
包裹
解包依赖项
**/*.SF
**/*.DSA
**/*.RSA
${project.build.directory}/classes
org.apache.maven.plugins
maven编译器插件
3.5
${jdk.version}
${jdk.version}
org.apache.maven.plugins
maven阴影插件
2.4.3
包裹
阴凉处
com.mycom.MyApp
MyApp

编辑1根据一项建议,我尝试指定排除项上方的所有工件,但仍然不起作用。当我解压缩jar文件时,签名的密钥仍然在其中。这是我修改过的POM(代码片段)。我注意到Netbeans在解包阶段的输出显示每个包的“Includes”和“excludes”。如何配置它以从jar中删除签名密钥文件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.10</version>
    <executions>
        <execution>
            <id>unpack-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <!-- Other configuration items -->
            </configuration>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven依赖插件
2.10
解包依赖项
包裹
解包依赖项
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
编辑2-最终答案我使用下面拉尔夫的答案和下面的POM片段来完成它

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <!-- add Main-Class to manifest file -->
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.mycom.MyApp</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

org.apache.maven.plugins
maven阴影插件
2.4.3
包裹
阴凉处
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
com.mycom.MyApp
试试这个:

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

*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
试试这个:

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

*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
可能更适合您的目的。它提供了几个转换器,允许您在将某些资源包含到最终的uber jar中之前,控制对它们采取的操作

查看
org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer

也许这也有助于你开始工作。

也许这更适合你的目的。它提供了几个转换器,允许您在将某些资源包含到最终的uber jar中之前,控制对它们采取的操作

查看
org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer


也许这也有助于你开始工作。

这不是更适合你的目的吗?也许这会有帮助。谁对这个问题投了反对票,愿意发表评论吗?嗨@Ralf,maven shade插件成功了!如果你能给出一个简单的答案,我会接受的!谢谢这不是更适合你的目的吗?也许这会有帮助。谁对这个问题投了反对票,愿意发表评论吗?嗨@Ralf,maven shade插件成功了!如果你能给出一个简单的答案,我会接受的!谢谢我试过了,但还是不起作用。我修改了我的问题,加入了修改后的片段。我注意到在NB输出中,