Скрытие записей манифеста с помощью maven

При создании файла jar с помощью maven он создает файл манифеста в 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

Как я могу скрыть записи манифеста? В частности, я хотел бы скрыть запись «Создано:», потому что я не вижу причин, по которым банка должна включать мое имя пользователя.


person Community    schedule 02.08.2014    source источник
comment
У меня тот же вопрос, хотя он не ограничивается в частности Built-By, и я не нашел никакого решения. Я назначаю награду за этот вопрос, потому что я также нашел именно то, что вы нашли в комментариях к единственному ответу на этот вопрос.   -  person DanielBarbarian    schedule 29.09.2014


Ответы (3)


документация плагина maven-achiver кажется довольно ясной, что вы не можете удалите свойства, только установите их пустыми, как описано в ответе Алекса Чернышева. Чтобы получить больший контроль над MANIFEST.MF, вы не должны использовать плагин maven-archiver.

Одним из вариантов может быть использование плагина maven antrun и Задание Ant Jar для создания Jar.

В пом.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>

Другой альтернативой является прямой вызов инструмента Jar с помощью плагина Maven exec.

Я не люблю рекомендовать 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

person Community    schedule 29.09.2014
comment
Как насчет использования плагина maven shadow? - person user11153; 01.10.2014
comment
Я не понимаю, как использовать плагин maven shadow для выполнения того, что задает вопрос. Если вы знаете, как это сделать, пожалуйста, отправьте подробности в качестве ответа, мне было бы интересно это увидеть. - person Richard Neish; 01.10.2014
comment
The maven-achiver plugin documentation seems pretty clear that you cannot remove properties. Я не согласен, на странице документации, на которую вы ссылаетесь, ничего не говорится об удалении свойств. Он описывает, что по умолчанию, но это не обязательно означает, что вы не можете их удалить. Однако это не означает, что ваш ответ неверен, и это действительно так. - person DanielBarbarian; 03.10.2014
comment
Ну, в документации ничего не говорится об удалении свойств, только о их добавлении. Это кажется довольно ясным, поскольку указывает на то, что вы не можете удалить свойства с помощью плагина maven-archiver. Именно это я имел в виду. - person Richard Neish; 03.10.2014
comment
Поскольку я сталкивался со многими неполными документами, прежде чем я никогда не воспринимал это как должное. В этом случае я ничего не видел о том, как решить эту проблему, и единственным способом было бы изменить плагин. Поскольку я не сомневаюсь, что вы правы в своем ответе, награда за вас. - person DanielBarbarian; 06.10.2014
comment
@RichardNeish Я добавил патч в билет MSHARED-362 Jira, который вы упомянули в своем ответе. Надеюсь, что это будет принято. - person Rostislav Krasny; 30.10.2018
comment
Я работаю над всеми из них, скоро вы сможете удалить их все, кроме Manifest-Version. - person Michael-O; 29.01.2019
comment
Спасибо @Michael-O и другим — я следил за обсуждением MSHARED-362 и MSHARED-787, отличная работа. - person Richard Neish; 30.01.2019

Добавлять

<addDefaultImplementationEntries>false</addDefaultImplementationEntries>

в раздел конфигурации maven-jar-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>

чтобы настроить его (удалить только имя пользователя):

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifestEntries>
                        <Built-By></Built-By>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
person Alex Chernyshev    schedule 02.08.2014
comment
Второе решение работает (запись все еще находится в манифесте, но запись все же). Первое решение не работает, записи по умолчанию для меня все еще находятся в манифесте. Согласно документации, addDefaultImplementationEntries предназначен только для реализации. * записи. - person ; 02.08.2014
comment
Арх! Моя вина! используйте это, чтобы полностью удалить сгенерированные свойства: ‹archive› ‹addMavenDescriptor›false‹/addMavenDescriptor› ‹/archive› empy-jar-maven-jar-plugin" title="невозможно отключить создание плагина empy jar maven jar"> stackoverflow.com/questions/13218313/ - person Alex Chernyshev; 02.08.2014
comment
Насколько я вижу, это влияет только на pom.xml, который по умолчанию включен в банку, но не на MANIFEST.MF. - person ; 02.08.2014
comment
Тогда это двойная ошибка) Просто создайте свой пустой файл и используйте его как: ‹архив› ‹manifestFile›src/custom-manifest.txt‹/manifestFile› ‹/archive› - person Alex Chernyshev; 02.08.2014
comment
Это просто делает то же самое, что и указание записей в <manifestEntries>, настраиваемый манифест объединяется с манифестом по умолчанию, но записи не исчезают. - person ; 02.08.2014

Задайте для переменной user.name пустую строку.

mvn -Duser.name="" package

Или, если вы используете Eclipse, добавьте -Duser.name="" к аргументам VM конфигурации запуска Maven (Run -> Run As -> Maven build... -> вкладка JRE -> введите -Duser.name="" в поле аргументов VM).

person user1257    schedule 09.01.2019