Подтвердить что ты не робот

Как исправить "отсутствие атрибута манифеста кода, разрешений и атрибутов приложения" в приложении JNLP?

С недавними обновлениями Java многие люди испытывают проблемы со своими приложениями Java Web Start, у которых отсутствуют атрибуты манифеста Codebase, Permissions и Application-name. Хотя есть ресурсы для того, чтобы помочь вам в этом, я не смог найти ответы на всеобъемлющие на этот вопрос, поэтому я почувствовал, что Q-and-A будет хорошим. Итак, вот вопрос:

В моем приложении Java Web Start отображаются следующие предупреждения в консоли:

Missing Permissions manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Codebase manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Application-Name manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar

Как это исправить?

4b9b3361

Ответ 1

(1). Сначала вам нужно создать текстовый файл со всеми атрибутами, которые вы хотите добавить. Мой текстовый файл выглядит так:

Permissions: all-permissions
Codebase: http://www.codebase.com/myApp/dist
Application-Name: My Application

Я назвал его addToManifest.txt. Очевидно, вам нужно будет изменить параметры в соответствии с потребностями вашего приложения.

(2) Затем вам нужно добавить это в основной .jar и все библиотеки. Команда для этого:

jar ufm dist\myApp.jar addToManifest.txt

конечно, dist\myApp.jar нужно указать на то, что ваш основной .jar. Вам также нужно будет сделать это для всех библиотек.

jar ufm dist\lib\jcommon-1.0.16.jar addToManifest.txt
jar ufm dist\lib\jfreechart-1.0.13.jar addToManifest.txt
jar ufm dist\lib\joda-time-2.2.jar addToManifest.txt
...

(Примечание: в Windows я написал для этого файл .bat.)

Как только вы это сделаете, атрибуты должны быть записаны в .jar s. Вы можете открыть .jars в zip-менеджере (например, 7-Zip), извлечь файл MANIFEST.MF, открыть его в текстовом редакторе, и вы должны увидеть перечисленные атрибуты.

(3) После добавления атрибутов вам нужно отменить свое приложение. Команда для этого:

jarsigner dist\myApp.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password

Вам также понадобится сделать это для всех ваших библиотек:

jarsigner dist\lib\jcommon-1.0.16.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
jarsigner dist\lib\jfreechart-1.0.13.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
jarsigner dist\lib\joda-time-2.2.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password

После этого ваши атрибуты должны быть добавлены, а ваш .jar должен быть подписан!

ПРИМЕЧАНИЕ. Вам нужно только один раз подписать/развернуть библиотеки, если вы не меняете структуру библиотеки. то есть, если вы обновляете свое приложение, но библиотеки уже изменили свои манифесты, правильно их подписали и развернули, вам не придется откладывать/развертывать библиотеки, если вы не добавляете/не удаляете библиотеки из своего приложения.

ПРИМЕЧАНИЕ # 2: Текущая версия Netbeans добавит атрибуты Codebase и Permissions в ваш основной .jar только, но не в ваши библиотеки. Если вы используете Netbeans, вы получите предупреждение от утилиты jar при попытке добавить дубликат атрибута манифеста. В очереди есть сообщение об ошибке, чтобы зафиксировать это https://netbeans.org/bugzilla/show_bug.cgi?id=234231.

EDIT: последняя версия Netbeans (8.0) теперь добавляет все три (Codebase, Permissions и Application-Name) в манифест для вас.

Ответ 2

Другим способом может быть его обработка в самой сборке script.

Шаг 1: определение цели для обновления

<target name="updateManifest">
    <manifest file="${file}" mode="update">         
        <attribute name="Trusted-Only" value="true"/>
        <attribute name="Permissions" value="all-permissions"/>
        <attribute name="Codebase" value="*"/>          
    </manifest>
</target> 

Шаг 2. Вызвать цель обновления и использовать новый манифест в банке

    <ant target="updateManifest">
        <property name="file" location="manifest.use" />
    </ant>

    <jar jarfile="${jar_name}.jar" manifest="manifest.use">
        <fileset dir="${dest}">
            <include name="File1" />                
        </fileset>
    </jar>

Ответ 3

Если сообщение об ошибке выглядит следующим образом:

Missing Application-Name manifest attribute for: server root/filename.jar

Вы можете решить эту проблему следующим образом:

  • Начать control panel

  • Выберите Java Control Panel

  • Выберите вкладку Security

  • В Exception Site list нажмите кнопку Edit Site List

  • Нажмите кнопку Add.

  • Введите корень сервера (например: https://ibank.cib.hu) и нажмите OK

  • Перезагрузите браузер/приложение.

Ресурс здесь.

Ответ 4

Пример добавления manifest в банку и подписывание баннеров.

<target name="-post-compile">
        <jar destfile="${build.web.dir}/jars/app.jar" >
            <fileset dir="${build.classes.dir}">
                <include name="com/sample/test/client/**/*.*"/>
                <include name="com/sample/test/share/**/*.*"/>
            </fileset>
            <manifest>
                <attribute name="Author" value="${user.name}"/>
                <attribute name="Permissions" value="all-permissions"/>
                <attribute name="Codebase" value="http://localhost:8080/app/"/>
                <attribute name="Application-Name" value="App"/>
            </manifest>
        </jar>
        <signjar keystore="app.keystore"  storepass="test"  jar="${build.web.dir}/jars/app.jar" alias="tomcat" />


        <copyfiles files="${file.reference.javadatepicker.jar}" todir="${build.web.dir}/jars"/>


        <delete dir="${build.web.dir}/WEB-INF/classes/com/sample/app/client"/>
        <!--keytool -genkey -alias tomcat -keystore app.keystore -keypass test -storepass test -validity 1960-->
        <signjar keystore="app.keystore"  storepass="test"  jar="${build.web.dir}/jars/javadatepicker.jar" alias="tomcat" />

    </target>

Ответ 5

Если вы используете Netbeans, установите эти атрибуты в свой файл nbproject/project.properties:

  • manifest.custom.codebase
  • manifest.custom.permissions
  • manifest.application.name.attribute

Самый последний поддерживается только Netbeans >= 8.0 (см. здесь). Остальные должны работать даже в Netbeans 7.2. Я также установил jnlp.mixed.code в trusted_only, но, возможно, в вашем случае это не подходит. Вы можете изменить свой файл jnlp-impl.xml на свой страх и риск, если вы не можете переключиться на более новую версию Netbeans.

atulsm предложение лучше, если вы не используете Netbeans.