【问题标题】:How to create a jar without meta-inf folder in maven?如何在maven中创建一个没有meta-inf文件夹的jar?
【发布时间】:2016-09-12 15:21:58
【问题描述】:

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

   -M  do not create a manifest file for the entries

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

如何使用 maven-jar-plugin 做到这一点?我需要这样做以符合另一个流程。 (他们希望 jar 具有非常特定的文件/文件夹布局,我不能在 jar 文件的根目录中包含 META-INF 文件夹。)

我已经有了创建jar文件的配置,我不想和另一个插件混在一起......

【问题讨论】:

  • 答案解决了你的问题吗?
  • 不是真的,包含的依赖项是个问题,所以我不记得我最终做了什么来解决它,但这里没有提到任何东西。

标签: java maven jar


【解决方案1】:

你可以使用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目录,只包含当前项目,不附加依赖。

【讨论】:

    【解决方案2】:

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

             <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <addMavenDescriptor>false</addMavenDescriptor>
                        <manifest>
                            <addClasspath>false</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
    

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

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

    【讨论】:

    • 这有一个副作用是在阴影 jar 中包含依赖项。
    • 一些用户建议:要解决包含依赖项的副作用,只需将它们声明为:&lt;scope&gt;provided&lt;/scope&gt; ...感谢@svermeille,如果这是正确的...
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 2010-11-20
    • 2016-12-14
    • 2020-11-03
    • 2015-12-29
    • 2021-11-24
    • 2011-09-16
    • 2013-07-06
    相关资源
    最近更新 更多