【问题标题】:Web-start exception JNLPWeb 启动异常 JNLP
【发布时间】:2012-09-12 16:05:28
【问题描述】:

所以我对如何签署 jar 以使其作为 jnlp 运行有点困惑。

目前我有一个jar,它运行,开始下载并验证东西,然后它到最后并弹出一个窗口说它无法启动,然后它给出了异常:

JNLPException[category: Launch File Error : Exception: null : LaunchDesc: 
 <jnlp codebase="http:/SomeHost:8080/_test/" href="jnlpcomponent1.jnlp" spec="1.0+">
<information>
  <title>jnlpcomponent1</title>
 <vendor>SUN_MICR</vendor>
 </information>
 <security>
 <all-permissions/>
  </security>
<resources>
 <jar href="lib/activation.jar" download="eager"/>
<jar href="lib/mail.jar" download="eager"/>
 </resources>
 <component-desc/>
 </jnlp> 
]
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
at com.sun.javaws.Main.launchApp(Unknown Source)
at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
at com.sun.javaws.Main$1.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我相当确定这与 jar 被错误/错误地签名有关......我可以使用一些帮助来了解这里发生了什么以及如何修复它。

非常感谢。

【问题讨论】:

  • 你是如何签署 jar 的?比如,命令和结果输出是什么?
  • 就是这样,我根本没有签署它们,这只是来自 netbeans 的 JNLP 的正常清理 + 构建。签署 jnlp 的正确方法是什么?
  • 使用 jarsigner。看这里:java.sun.com/developer/Books/javaprogramming/JAR/sign/… 你需要一个密钥库,如果你愿意,你可以自己制作。
  • 是否有推荐的方式与团队共享我的密钥库,以便我们都可以作为同一个实体签名?
  • 尝试搜索错误数据库/提出错误。但请务必先使用 JaNeLA 检查 JNLP。

标签: java deployment jnlp java-web-start


【解决方案1】:

我很确定这与正在签名的 jar 相关 错误/糟糕

恰巧,你的一个罐子没有签名(正确)

什么总是对我有用: 解压缩所有 jar,而不是使用 1 个进程签名。如果确认它可以正常工作,那么我将移除 1-2 个 jar 以匹配原始部署设计。而且您会知道问题出在哪个 jar 中,而不是更容易解决。

【讨论】:

  • 从上面引用:“就是这样,我根本没有签署它们,这只是来自 netbeans 的 JNLP 的正常清理 + 构建。签署 a 的正确方法是什么jnlp?”
【解决方案2】:

您可以使用 ANT 对 JAR 文件进行签名。通过这种方式,您可以从 IDE 中对文件进行签名,并且可以在部署应用程序时加快工作流程。每项更改都需要您重新签署您的应用程序。

<project name="YourProject" default="dist" basedir="jarsigning">

  <target name="signMainJar">
     <signjar jar="../dist/YourApp.jar" destDir="signed" alias="WhateverYouSetIt2" 
              keystore="fileNameOfCerticate" storepass="passw03d" lazy="true" /> 
     <echo message="The file was signed." /> 
  </target>
  <!-- Use this if you are using any libraries. These also need to be signed. -->
  <target name="signLibs">
    <signjar destDir="signed" alias="WhateverYouSetIt2"
              keystore="fileNameOfCerticate" storepass="passw03d" force="true">
       <path>
          <fileset dir="lib" includes="*.jar" /> 
       </path>
    </signjar>
    <echo message="The library files were signed." /> 
  </target>

 </project>

在运行此脚本之前,您需要先创建一个 jarsigning 目录并放置一个用于签名的证书(密钥)。在该文件夹中,创建一个名为“已签名”的文件夹,这是脚本将放置已签名代码的位置。如果您尚未从 Verisign 或 GoDaddy 等授权机构购买自签名证书,请使用 keystore tool 创建自签名证书。

【讨论】:

    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2019-12-12
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多