java - 从生成的 jar 文件中排除 META-INF/maven 文件夹

标签 java maven maven-shade-plugin

我正在尝试创建一个 jar 文件,其中包含在 jar 中提取的所有必要类。但是对于像 log4j 这样的少数依赖 jar ,它在 META-INF/maven/* 中创建了一些文件夹。我有一个限制,我将放置生成的 jar 文件的服务器将没有 Internet 连接。因此,如果此 META-INF/maven/* 文件夹中有任何内容,则会给我一个错误。

我的 maven 描述符如下所示

<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <addMavenDescriptor>false</addMavenDescriptor>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <minimizeJar>true</minimizeJar>
                <finalName>myclient</finalName>
            </configuration>
        </plugin>
    </plugins>
</build>

我能够在生成的 jar 中提取所需的类文件,但 maven 文件夹仍在 META-INF 下生成。我必须手动删除该文件夹才能使一切正常。请就如何从生成的 jar 文件中自动删除 maven 文件夹提出建议。

最佳答案

您可以使用 filtersmaven-shade-plugin 配置中为每个 Artifact 排除 META-INF/maven 下的所有内容:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/maven/**</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

可以找到maven-jar-plugin 的解决方案here .

关于java - 从生成的 jar 文件中排除 META-INF/maven 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32887455/

相关文章:

android - 使用 ADT 20 将 Maven Android Android 项目导入 Eclipse 时出错

java - 如何使用Maven Shade插件?

java - mvn package verify 导致 maven-shade-plugin 执行两次

java - Maven 阴影插件 - 无法执行目标

java - 更新对话框内的编辑文本,值会更新,但文本不会更新

maven - GAE Maven如何部署

java - Hibernate 与空列表比较?

scala - 如何使用 Scala IDE 和 Maven 构建 spark 应用程序?

java - Java 中可比较接口(interface)与通用静态方法的使用

java - Locale.getLanguage() 等于 String