![](/img/trans.png)
[英]Why am I getting a “Missing Application-Name manifest attribute” error when it's in my manifest?
[英]How do I fix “missing Codebase, Permissions, and Application-Name manifest attribute” in my JNLP app?
随着最近的Java更新,许多人在使用缺少Codebase
, Permissions
和Application-name
manifest属性的Java Web Start应用程序时遇到了问题。 虽然有资源可以帮助你实现这一目标,但我找不到任何关于这个问题的全面答案,我觉得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
我该如何解决?
(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
。 您可以在zip管理器(如7-Zip)中打开.jars,解压缩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 。
编辑:最新版本的Netbeans(8.0)现在将所有三个( Codebase
, Permissions
和Application-Name
)添加到清单中。
另一种方法是在构建脚本本身中处理它。
第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步:调用更新目标并在jar中使用新的清单
<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>
如果错误消息如下所示:
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
重启浏览器/应用程序。
如果使用Netbeans,请在文件nbproject / project.properties中设置这些属性:
最后一个只受Netbeans支持> = 8.0(见这里 )。 其他人甚至应该在Netbeans 7.2中工作。 我也将jnlp.mixed.code设置为trusted_only但可能在你的情况下不合适。 如果无法切换到更新版本的Netbeans,您可以自行修改文件jnlp-impl.xml。
如果你不使用Netbeans,atulsm的建议会更好。
将manifest
添加到jar和签名罐子的示例..
<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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.