我们决定按照this oracle指南签署我们的JNLP文件。由于我们有不同的JNLP,我们采用了第二种方法(使用JNLP模板签署JAR文件)。
这是我们提取到模板中的代码:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="*" href="*">
<information>
<title>*</title>
<vendor>My vendor</vendor>
<description>My description</description>
<icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
<offline-allowed />
<shortcut>
<menu submenu="My submenu"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources locale="en es ja">
<j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="myjar.jar" main="true" download="lazy" part="core" size="*"/>
<jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
...
<jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
<property name="jnlp.myProperty" value="*"/>
<property name="log4j.configuration" value="*"/>
</resources>
<application-desc main-class="com.mycom.myapp.MyClass">
</application-desc>
</jnlp>
......这是我们实际使用的JNLP之一:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://mylocation.mycom.com/jnlp/myapp/" href="myapp.jnlp">
<information>
<title>My App - Production version</title>
<vendor>My vendor</vendor>
<description>My description</description>
<icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
<offline-allowed />
<shortcut>
<menu submenu="My submenu"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources locale="en es ja">
<j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="myjar.jar" main="true" download="lazy" part="core" size="4189501"/>
<jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
...
<jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
<property name="jnlp.myProperty" value="http://mylocation.mycom.com/jnlp/myapp/MyApp.properties"/>
<property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/>
</resources>
<application-desc main-class="com.mycom.myapp.MyClass">
</application-desc>
</jnlp>
请注意我使用通配符(*
):
我将模板放在适当的JNLP-INF
文件夹中(同样具有相应的名称),然后我们签署了JAR。但是,我们不断收到JNLPSigningException
消息,其中包含以下消息:
无法验证启动文件的签名。签名版本与下载的版本不匹配。
有没有人知道我错过了什么?
答案 0 :(得分:3)
我遇到了同样的问题,但事实证明,我的src/JNLP-INF/APPLICATION.JNLP
文件中包含的.jar
文件(用作签名的jnlp文件)与application.jnlp
文件不同在<applet>
标记中定义的Web应用程序中使用。一旦我做了同样的事情,错误就消失了。
谨慎使用.jar
文件中的签名JNLP文件,该文件需要精确命名为JNLP-INF/APPLICATION.JNLP
,因为它用作模板以匹配应用程序中调用的jnlp:
答案 1 :(得分:0)
我相信它对标签中的通配符不满意。 我遇到了这种情况。 出于测试目的,我删除了通配符并阻塞了另一个值。 工作得很好 - 但这是不可接受的解决方案,因为这是财产的全部要点!
答案 2 :(得分:0)
我在Java 1.7.0_45上就自签名战争遇到了这个问题,解决方案是删除没有jnlp的属性。字首。在你的情况下尝试删除:
<property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/>
答案 3 :(得分:0)
作为调试提示,我发现从命令行运行javaws -verbose和jnlp文件的url会在Console选项卡中为您提供额外的详细信息。