Самый простой способ добавить атрибут в манифест банку в 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>
должен делать работу