Когда я запускаю приложение из JNLP Я получаю сообщениеОтсутствует Codebase манифест атрибут: xxx.jar
"Missing Codebase manifest attribute for:xxx.jar
"
, что это значит?
Когда я запускаю приложение из JNLP Я получаю сообщениеОтсутствует Codebase манифест атрибут: xxx.jar
"Missing Codebase manifest attribute for:xxx.jar
"
, что это значит?
Только что столкнулся с этим при запуске внутреннего приложения после обновления моей JRE до 1.7u25. Предупреждения появляются из-за новой функции безопасности, введенной в 1.7u25, для предотвращения повторного использования неавторизованного кода. В моем случае мне также был представлен диалог с просьбой подтвердить, что я хочу, чтобы приложение имело доступ к моему компьютеру.
Если у вас есть доступ к файлу jar, добавьте к нему два атрибута: Permissions
и Codebase
. Вам нужно решить, требует ли приложение доступ ко всему на ПК, и в этом случае вы должны использовать значение all-permissions
для атрибута Permissions
. В противном случае используйте sandbox
, а JRE ограничит уровень доступа к коду на ПК. Codebase
, вероятно, должен быть таким же, как и кодовая база для файла jnlp, если этот файл jar не загружается с другого URL-адреса, и в этом случае он должен быть этим URL-адресом.
Ссылка: Oracle's Java 7 documentation
это привело к ошибке для меня: 'java.io.IOException: Invalid сигнатурный файл для основных атрибутов Manifest'. Я добавил строку «Разрешения: все разрешения» и другую «Codebase: (http: // ...)», как вы указали. – ryvantage
@ryvantage, добавьте эти атрибуты перед подписанием файла jar. – Peter
Файл банка создается и подписывается автоматически Netbeans. И создание, и подпись выполняются одним движением. :( – ryvantage
См подробное объяснение об ошибке вы упомянули. http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/no_redeploy.html
Следуя за ответом Питера, вы решаете проблему автоматическим способом, если вы используете Netbeans и JavaFX.
Netbeans 7.3.1 все еще не имеет этой «ошибки» исправлен (он не добавляет к вам манифеста и разрешения). Если вы хотите использовать Netbeans для создания проекта, а не вручную добавить недостающие атрибуты (и повторно подписать .jar), вы можете изменить build.xml и добавьте следующую ANT цели и макросы:
<target name="-post-jfx-jar">
<update-libs-manifest />
<update-jar-manifest jarfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" />
</target>
<macrodef name="update-libs-manifest">
<sequential>
<property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
<property name="pp_rebase_fs" value="*.jar"/>
<condition property="manifest.codebase" value="${manifest.custom.codebase}" else="*">
<and>
<isset property="manifest.custom.codebase" />
<not>
<equals arg1="${manifest.custom.codebase}" arg2="" trim="true" />
</not>
</and>
</condition>
<condition property="manifest.permissions" value="all-permissions" else="sandbox">
<isset property="permissions-elevated" />
</condition>
<echo message="Updating libraries manifest => Codebase: ${manifest.codebase}/Permissions: ${manifest.permissions}" />
<script language="javascript">
<![CDATA[
var dir = project.getProperty("pp_rebase_dir");
var fDir = new java.io.File(dir);
if(fDir.exists()) {
var callTask = project.createTask("antcall");
callTask.setTarget("-update-jar-macro-call");
var param = callTask.createParam();
param.setName("jar.file.to.rebase");
var includes = project.getProperty("pp_rebase_fs");
var fs = project.createDataType("fileset");
fs.setDir(fDir);
fs.setIncludes(includes);
var ds = fs.getDirectoryScanner(project);
var srcFiles = ds.getIncludedFiles();
for (i=0; i<srcFiles.length; i++) {
param.setValue(dir + "${file.separator}" + srcFiles[i]);
callTask.perform();
}
}
]]>
</script>
</sequential>
</macrodef>
<target name="-update-jar-macro-call">
<update-jar-manifest jarfile="${jar.file.to.rebase}"/>
</target>
<macrodef name="update-jar-manifest">
<attribute name="jarfile"/>
<sequential>
<echo message="jarfile = @{jarfile}" />
<jar file="@{jarfile}" update="true">
<manifest>
<attribute name="Codebase" value="${manifest.codebase}"/>
<attribute name="Permissions" value="${manifest.permissions}"/>
</manifest>
</jar>
</sequential>
</macrodef>
После этого вам просто нужно добавить manifest.custom.codebase=<your_codebase>
в ваш project.properties. Например: manifest.custom.codebase=localhost
Внимание: этот код предназначен для приложения JavaFX с использованием процесса сборки ANT по умолчанию Netbeans. Вам нужно будет обновить его соответствующим образом, если это не ваш случай - для этого потребуется изменение в первом целевом объекте (<target name="-post-jfx-jar">
), имена свойств и условие, которое проверяет свойство permissions-elevated
.
привет, с качающим приложением, как я могу это сделать? – nachokk
Вот что я нашел:
ПРИЧИНЫ
Начиная с Java 7 Update 51, Java усовершенствовала модель безопасности, чтобы пользователь систему менее уязвимой к внешним подвигам. Новая версия Java не позволяет пользователям запускать приложения, которые не подписаны (не подписаны), самоподписанные (не подписанные доверенными полномочиями) и приложениям, которые не имеют атрибутов разрешений.
У меня проблема с запуском TopCoder Arena. Он может быть легко удалены с помощью ссылку ниже:
исчерпывающий ответ на этот вопрос можно найти на этом Q/A: HTTP: // StackOverflow.com/questions/19659134/how-do-i-fix-missing-codebase-permissions-and-application-name-manifest-attri/20501377 # 20501377 – ryvantage