5

嗨,我对 Java Webstart 有疑问。我们有一个启用版本控制的 JNLP 配置,即:

 <property name="jnlp.versionEnabled" value="true"/>

我们正在使用每个 jar 的版本号,例如:

<jar href="project.jar" version="2.5.7.0"/>.

我们还使用 Maven Jar 签名者插件对我们的应用程序 jar 进行签名。

到目前为止,你说的一切都很好。

好吧,每次我们发布应用程序的新版本时,我们都会使用每个 jar 的新版本号更改 JNLP 文件(并非所有 jar 都会更改版本),但与上面的 project.jar 示例一样,我们可以说这个版本号从 2.5 开始增加。 7.0 到 2.5.7.1。例如

<jar href="project.jar" version="2.5.7.1"/>.

当我们的用户通过 JNLP 文件下载新应用程序时,他们会收到以下错误:

#### Java Web Start Error:
#### JAR resources in JNLP file are not signed by same certificate

我在 Webstart 中添加了额外的 DEBUG,并在 Java Concole 中发现了以下错误:

security: Validating cached jar url=http://servername/lib/project_V2.5.7.1.jar ffile=C:\Documents and Settings\username\Application Data\Sun\Java\Deployment\cache\6.0\10\57344cca-719709af-2.5.7.1- com.sun.deploy.cache.CachedJarFile@11e1bbf
security: Have 0 common certificates after processing http://servername/lib/project.jar
network: Remove cache entry: http:///lib/project__V2.5.7.1.jar

似乎 Webstart 正在尝试检查名为 project_V2.5.7.1.jar 的 jar(不存在)的本地缓存,因为它是新版本/下载的一部分。

由于找不到 JAR,它假定证书不匹配 - 因此出现错误:

JAR resources in JNLP file are not signed by same certificate.

我假设这是 Webstart 错误!这给我们带来了很大的痛苦,因为我们现在必须在每次发布之前手动清除 webstart 缓存 - 对于每个用户。

有人有类似的问题吗?

4

3 回答 3

1

我认为根据我的经验,可能发生的情况是,一旦您将版本号从 2.5.7.0 增加到 2.5.7.1 并再次对 jar 进行签名而不删除较旧的清单条目,那么 webstart 往往会认为资源未签名由相同的证书。您可以尝试的一件事可能会有所帮助:

解压导致问题的 jar,从中清除所有 META-INF 目录,将其 jar 并再次签名。

让我知道这是否有帮助。

于 2012-07-20T05:37:45.977 回答
0

根据您的问题“好吧,每次我们发布应用程序的新版本时,我们都会使用每个 jar 的新版本号更改 JNLP 文件(并非所有 jar 都会更改版本)”

那么您是否也更改了其他 jar 的版本号?

当您使用新证书对jar文件进行签名时,您必须更改所有jar文件的版本号,否则版本号相同但由新证书签名的jar文件将无法下载并导致问题。

于 2013-02-22T02:13:29.287 回答
0

我还解决了使用我用于 jar 的相同证书对我的 jnlp 文件中包含的两个 jar 文件进行签名的问题。

这是我的 jnlp 文件:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://10.37.177.100:8085/AFM/resources/client/" href="AFMTray.jnlp">
<information>
    <title>AFMTray</title>
    <vendor>andreagirardi.it</vendor>
</information>

<security>
    <all-permissions />
</security>

<resources>
    <j2se version="1.4+" />
    <jar href="AFMTray.jar" />
    <property name="jnlp.versionEnabled" value="true"/>
</resources>

<resources os="Windows" arch="x86">
    <jar href="swt-windows.jar" />
</resources>

<resources os="Mac\ OS\ X" arch="x86_64">  
    <jar href="swt-osx.jar" />
</resources>  

<resources os="Mac\ OS\ X" arch="i386 x86">  
    <jar href="swt-osx.jar" />
</resources>  

<application-desc main-class="com.afm.TryLuncher" />

<shortcut online="true">
    <desktop/>
    <menu submenu="Esecuzione automatica"/>
</shortcut>

因此,我使用用于AFMTray.jar的相同证书签署了swt-osx.jarswt-windows.jar

于 2015-03-18T10:57:13.497 回答