用maven隐藏清单条目

12 java manifest.mf pom.xml maven

使用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-Jdk: 1.8.0_5
Run Code Online (Sandbox Code Playgroud)

如何隐藏清单条目?特别是我想隐藏"Built-By:"条目,因为我没有看到为什么jar应该包含我的用户名的任何理由.

Ric*_*ish 8

Maven的achiver插件文档似乎很清楚,你不能删除属性,如仅描述其设置为空白亚历克斯·切尔内绍夫的答案.为了更好地控制MANIFEST.MF,您不应该使用maven-archiver插件.

另一种方法是使用maven antrun插件Ant Jar任务来构建Jar.

在pom.xml中:

<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>
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用Maven exec插件直接调用Jar工具.

我不喜欢推荐antrun,因为我认为这是一个肮脏的黑客,但似乎maven-archiver不符合你的要求.可能值得提出maven-archiver的功能请求.

编辑:2014-10-06提出Jira MSHARED-362

编辑:2018-06-18:更新了Jira和Maven Exec插件的链接

编辑:2019-01-14:修复maven-archiver-3.4.0的目标


Ale*_*hev 6

<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
Run Code Online (Sandbox Code Playgroud)

在pom.xml中的maven-jar-plugin的configration部分完全删除默认属性:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <addDefaultImplementationEntries>false</addDefaultImplementationEntries>
        </manifest>
      </archive>
    </configuration>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

自定义它(仅删除用户名):

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Built-By></Built-By>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

  • 第二个解决方案有效(该条目仍然在清单中,但是条目).第一个解决方案没有,默认条目仍然在我的清单中.根据[文档](https://maven.apache.org/shared/maven-archiver/examples/manifest.html),addDefaultImplementationEntries仅适用于Implementation-*条目. (2认同)