Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用maven隐藏清单条目_Java_Maven_Pom.xml_Manifest.mf - Fatal编程技术网

Java 使用maven隐藏清单条目

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

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