Самый простой способ добавить атрибут в манифест банку в Maven

Со времени последнего обновления Java мне нужно пометить манифест jar апплета Trusted-Library атрибут, чтобы избежать появления всплывающего окна предупреждения, когда JavaScript связывается с апплетом. (см. http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/mixed_code.html)

Manifest-Version: 1.0
Trusted-Library: true
Created-By: 1.6.0-internal (Sun Microsystems Inc.)

Я никогда не делал таких вещей раньше, есть ли плагин, который позволяет сделать это без проблем, или я должен написать один, или использовать плагин ant?

Банки уже собраны и доступны через зависимости, скопированы в целевую папку для подписи во время упаковки. Я использую Maven 3

4 ответа

Решение

В конце я просто использовал плагин antrun, как показано ниже, antcontrib используется для циклического перемещения по списку jar-файлов:

строить-trusted.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- This is a wrapper for all the other build files. -->
<project basedir="." name="project_name">

  <target name="addTrustedLibraryProperty">
    <jar file="${jarFile}" update="true">
      <manifest>
        <attribute name="Trusted-Library" value="true" />
      </manifest>
    </jar>
  </target>

  <target name="addTrustedLibraries">
    <ac:foreach target="addTrustedLibraryProperty" param="jarFile" xmlns:ac="antlib:net.sf.antcontrib">
      <path>
        <fileset dir="target/lib" includes="**/*.jar" />
      </path>
    </ac:foreach>
  </target>

</project>

В пом

<plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>add-trusted-library-attribute</id>
            <phase>package</phase>
            <configuration>
              <target>
                <ant antfile="${basedir}/build-trusted.xml">
                  <target name="addTrustedLibraries" />
                </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>ant-contrib</groupId>
            <artifactId>ant-contrib</artifactId>
            <version>1.0b3</version>
            <exclusions>
              <exclusion>
                <groupId>ant</groupId>
                <artifactId>ant</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-nodeps</artifactId>
            <version>1.8.1</version>
          </dependency>
        </dependencies>
      </plugin>

Вы можете сделать это с помощью Maven JAR Plugin во время создания файла JAR. Добавьте следующее к вашему pom.xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifestEntries>
                <Trusted-Library>true</Trusted-Library>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.2</version>
    <executions>
        <execution>
            <id>sign</id>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <keystore>/path/to/testkeystore</keystore>
        <alias>myalias</alias>
        <storepass>test123</storepass>
    </configuration>
</plugin>

Основные атрибуты, указанные в спецификации файла JAR, доступны в виде выделенных элементов, например:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <addMavenDescriptor>false</addMavenDescriptor>
            <manifest>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
            <manifestEntries>
                <Trusted-Library>true</Trusted-Library>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

См. Справочник Архиватора Maven для получения дополнительной информации.

Чтобы изменить манифест внутри существующего файла JAR, создайте текстовый файл, например: mymanifest.mf который содержит необходимые свойства:

Trusted-Library: true

Вы можете добавить атрибуты этого файла в существующий jar, выполнив следующую команду:

jar -cfm file-to-be-modified.jar mymanifest.mf

Это изменит manifest.mf внутри данной банки.

На сегодняшний день мне нужно было добавить некоторые атрибуты манифеста для подписанного Java-апплета. Я нашел это очень просто с Maven-Jar-плагин. Просто поместите необходимые атрибуты в src/main/resources/META-INF/MANIFEST.MF:

    Permissions: all-permissions

Затем просто настройте плагин maven-jar-plugin:

        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <archive>
                    <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>

И результат был:

    Manifest-Version: 1.0
    Build-Jdk: 1.7.0_51
    Built-By: bart
    Permissions: all-permissions
    Created-By: Apache Maven 3.0.5
    Archiver-Version: Plexus Archiver

    Name: name/prokop/bart/fps/util/BartDate.class
    SHA-256-Digest: XatHlhiWAK3ArocdOcVPCS3ftOcokJNlUeRhKPTHUKs=

Вы можете использовать утилиту jar для обновления манифеста для существующих.jar такие файлы:

echo 'Trusted-Library: true' > manifest.mf
jar uvfm your-jar-file.jar ./manifest.mf

Для получения дополнительной информации см. Документ и учебное пособие здесь.

Я считаю использование webstart-maven-plugin правильным выбором здесь. Я имею в виду, что есть ошибки, есть вещи, которые вам, возможно, придется исправлять самостоятельно, но если вы согласны с этим, один плагин может сделать для вас довольно много без каких-либо обходных путей.

Для конкретной проблемы есть отчет об ошибке с включенным рабочим патчем. Смотрите: http://jira.codehaus.org/browse/MWEBSTART-213

ОБНОВЛЕНИЕ:

исправление включено в релиз: 1.0-beta-4,

собирается для конфигурации:

<updatedManifestEntries>
  <Permissions>all-permissions</Permissions>
  <Codebase>*</Codebase>
  ....
</updatedManifestEntries>

должен делать работу

Другие вопросы по тегам