Самый простой способ добавить атрибут в манифест баннера в Maven
Со времени последнего обновления Java мне нужно пометить манифест манифест апплетов с атрибутом 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
Ответы
Ответ 1
В конце концов я просто использовал плагин antrun, как показано ниже: antcontrib используется для циклического перебора списка баннеров:
встроенный 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>
В pom
<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>
Ответ 2
Вы можете сделать это с помощью 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 File Specification, доступны в качестве выделенных элементов, например:
<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 Archiver Reference.
Чтобы изменить манифест внутри существующего файла jar, создайте текстовый файл, например. mymanifest.mf
, который содержит требуемые свойства:
Trusted-Library: true
Вы можете добавить атрибуты этого файла в существующую банку, выполнив следующую команду:
jar -cfm file-to-be-modified.jar mymanifest.mf
Это изменит manifest.mf
внутри данной фляги.
Ответ 3
На сегодняшний день мне нужно добавить некоторые атрибуты манифеста для подписанного Java-апплета. Я нашел это очень просто с maven-jar-plugin. Просто поместите необходимые атрибуты в 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=
Ответ 4
Я считаю использование webstart-maven-plugin правильным выбором. Я имею в виду, что есть ошибки, есть вещи, которые вам, возможно, придется исправлять самостоятельно, но если вы в порядке с этим, один плагин может сделать для вас много, не обходятся обходными методами ant.
Для конкретной проблемы есть отчет об ошибке с включенным рабочим патчем. См.: http://jira.codehaus.org/browse/MWEBSTART-213
UPDATE
В релиз входит fix: 1.0-beta-4
.
для конфигурации:
<updatedManifestEntries>
<Permissions>all-permissions</Permissions>
<Codebase>*</Codebase>
....
</updatedManifestEntries>
должен выполнить работу
Ответ 5
Вы можете использовать утилиту jar, чтобы обновить манифест для существующих файлов .jar
, например:
echo 'Trusted-Library: true' > manifest.mf
jar uvfm your-jar-file.jar ./manifest.mf
Для получения дополнительной информации см. документ и учебное пособие здесь.