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
构建规则来完成?
maven-jar-plugin
使用maven-archiver
来处理包装。它提供了配置addMavenDescriptor
,默认为true
。将其设置为 false
应删除 META-INF/maven
目录。
...
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
....
</archive>
您可以在此处找到参考。
您可以使用 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>
我们对我们面临的问题有疑问,我们认为这可能与您的建议有关。
我们正在构建一个使用我们创建的自定义 JAR 的服务,但我们遇到了“未找到工件”错误。经过调查,我们注意到我们的 JAR 包含 META-INF/maven 文件夹。
您认为排除 META-INF/maven 文件夹可以解决此问题吗?这样做安全吗?