如何在maven中创建没有meta-inf文件夹的jar?

时间:2016-05-16 18:21:59

标签: java maven jar

如果我想使用jar实用程序创建一个没有META-INF废话的jar文件,我可以传递-M开关,它将:

   -M  do not create a manifest file for the entries

请注意,这是jar实用程序的一项功能。如果我使用它,我会得到一个没有META-INF文件夹的jar并包含MANIFEST,基本上只是一个jar类型的存档,包含我放入的任何文件/目录。

如何使用maven-jar-plugin执行此操作?我需要这样做以符合另一个过程。 (他们希望jar具有非常特定的文件/文件夹布局,我不能在jar文件的根目录下有一个META-INF文件夹。)

我有配置来正确创建jar文件,我不想搞乱其他插件...

2 个答案:

答案 0 :(得分:7)

在maven-jar-plugin中没有禁止创建manifest文件夹的选项,但你可以像这样禁用maven描述符目录:

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

如果您想要删除META-INF文件夹,可以像这样使用maven-shade-plugin:

CREATE TABLE test_txt(field1 int, field2 string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

LOAD DATA INPATH '/path/to/file.tsv' INTO TABLE test_txt;

CREATE TABLE test STORED AS SEQUENCEFILE
AS SELECT * FROM test_txt;

DROP TABLE test_txt;

答案 1 :(得分:4)

您可以使用maven-shade-plugin来达到预期的效果:

<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>
                <artifactSet>
                    <includes>
                        <include>${project.groupId}:${project.artifactId}</include>
                    </includes>
                </artifactSet>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

配置过滤掉META-INF目录并仅包含当前项目,以便不附加依赖项。