Java 使用maven隐藏清单条目
使用maven构建jar文件时,它将在META-INF/manifest.MF中创建一个清单文件。它目前的内容是:Java 使用maven隐藏清单条目,java,maven,pom.xml,manifest.mf,Java,Maven,Pom.xml,Manifest.mf,使用maven构建jar文件时,它将在META-INF/manifest.MF中创建一个清单文件。它目前的内容是: Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Built-By: <my username> Created-By: Apache Maven 3.1.0 Build-J
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: <my username>
Created-By: Apache Maven 3.1.0
Build-Jdk: 1.8.0_5
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
清单版本:1.0
Archiver版本:丛式Archiver
建造人:
创建人:ApacheMaven 3.1.0
构建Jdk:1.8.05
如何隐藏清单条目?我特别想隐藏“buildby:”条目,因为我看不出jar应该包含我的用户名的任何原因。Add
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
false
要在pom.xml中配置maven jar插件部分以完全删除默认属性:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven jar插件
假的
要自定义它(仅删除用户名):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
org.apache.maven.plugins
maven jar插件
很明显,您无法删除属性,只能按照中的说明将属性设置为空。为了更好地控制MANIFEST.MF,您不应该使用maven archiver插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
一种替代方法是使用和来构建Jar
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
在pom.xml中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<project>
...
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<jar destfile="test.jar" basedir=".">
<include name="build"/>
<manifest>
<attribute name="Manifest-Version:" value="1.0"/>
</manifest>
</jar>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
我不喜欢推荐antrun,因为我认为这是一个肮脏的黑客行为,但maven archiver似乎不符合您的要求。也许值得为maven archiver提出一个特性请求
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
编辑:2014-10-06
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
编辑:2018-06-18:更新到Jira和Maven Exec插件的链接
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
编辑:2019-01-14:针对maven-archiver-3.4.0的修复程序将user.name
变量设置为空字符串
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
mvn-Duser.name=”“软件包
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
或者,如果您正在使用Eclipse,请将-Duser.name=”“
添加到Maven运行配置的VM参数(运行->运行方式->Maven构建…->JRE选项卡->在VM参数字段中输入-Duser.name=“
)。第二个解决方案有效(该项仍在清单中,但条目仍然存在)。第一个解决方案没有,默认条目仍然在清单中。根据,addDefaultImplementationEntries仅用于实现-*项。啊!我的错!使用此选项可以完全删除生成的属性:据我所见,这只影响jar中默认包含的pom.xml,但不是MANIFEST.MF。那么这是双重错误)只需创建自己的空文件并将其用作:src/custom-MANIFEST.txt,其作用与在
中指定条目相同,自定义清单与默认清单合并,但条目不会消失。我有同样的问题,尽管它不限于特定的构建者,而且我还没有找到任何解决方案。我在这个问题上悬赏,因为我也找到了你在这个问题唯一答案的评论中找到的东西。如何使用?我不知道如何使用maven shade插件来完成这个问题。如果您知道如何做到这一点,请提交详细信息作为答案,我很想看看。maven achiver插件文档似乎非常清楚,您无法删除属性
。我不同意,在你链接到它的文档页面上没有提到删除属性。它确实描述了什么是默认的,但这并不一定意味着你不能删除它们。然而,这并不意味着你的答案不正确,事实似乎确实如此。@RichardNeish我在你的答案中提到的MSHARED-362 Jira机票中添加了一个补丁。希望它能被接受。我正在处理所有这些问题,很快你就可以删除所有问题,除了清单版本
。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>