Maven:从 JAR 中排除“META-INF/maven”文件夹

问题描述 投票:0回答:3

我使用

Maven
来构建
JAR
。当我检查
JAR
时,我在
maven
文件夹内看到了
META-INF
文件夹。我希望将其从构建中排除。我当前在
pom.xml
中的构建代码如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>Libraries</classpathPrefix>
                        <mainClass>com.company.Main</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Built-By>Me</Built-By>
                    </manifestEntries>
                </archive>
                <!-- <excludes>
                    <exclude>META-INF/maven/**</exclude>
                </excludes> -->
            </configuration>
        </plugin>
        <!-- ...more plugins... -->
    </plugins>
</build>

我读到使用

exclude
标签可以让你排除某些内容,但它不起作用。也许这仅指本地文件/文件夹?
maven
文件夹不是源的一部分,它只是由
Maven
添加的。

这个答案可以工作,但使用了不同的工件,因此当我将其粘贴到我的

JAR
中时,会生成第二个
pom.xml
。我想使用当前的构建代码并排除
maven
文件夹,如上所述。如何使用
maven
构建规则来完成?

java maven jar
3个回答
9
投票

maven-jar-plugin
使用
maven-archiver
来处理包装。它提供了配置
addMavenDescriptor
,默认为
true
。将其设置为
false
应删除
META-INF/maven
目录。

...
<archive>
   <addMavenDescriptor>false</addMavenDescriptor>
   ....
</archive>

您可以在此处找到参考。


1
投票

您可以使用 Maven Shade 插件来创建 jar 并使用 pom.xml 文件中的以下配置排除 Maven 文件夹:

<profile>
    <id>shade</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.3</version>
                <executions>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <filters>
                            <filter>
                                <excludes>
                                    <exclude>META-INF/**</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </executions>
                ...
</profile>

0
投票

我们对我们面临的问题有疑问,我们认为这可能与您的建议有关。

我们正在构建一个使用我们创建的自定义 JAR 的服务,但我们遇到了“未找到工件”错误。经过调查,我们注意到我们的 JAR 包含 META-INF/maven 文件夹。

您认为排除 META-INF/maven 文件夹可以解决此问题吗?这样做安全吗?

© www.soinside.com 2019 - 2024. All rights reserved.