【问题标题】:What's with the new JNLP Missing items warnings in Java 7?Java 7 中新的 JNLP Missing items 警告是什么?
【发布时间】:2013-10-18 13:49:29
【问题描述】:

在我们从 Java 6 切换到 Java 7 后,我的 JNLP 仍然可以正常工作,但它现在会引发一系列错误,如下所示:

Missing Application-Name: manifest attribute for: http://blah.com/app.jar
Missing Permissions manifest attribute for: http://blah.com/app.jar
Missing Codebase manifest attribute for: http://blah.com/app.jar

它对我们的主 jar 重复几次,对我们的一个库 jar 重复几次。但是,对于我们的大部分库 jar,它根本不会发生。 JaNeLa 列出了一些优化机会(通过更改一些默认值),但似乎没有一个是相关的,也没有发现实际错误。

到目前为止,在网上搜索让我对如何将 JNLP 文件格式变成 Java 7 认为有价值的东西一无所知。 :-)

【问题讨论】:

    标签: java security java-web-start jnlp


    【解决方案1】:

    有关权限和代码库的说明,请参阅 Missing Codebase manifest attribute for:xxx.jar。如果您使用 ant,则可以使用以下内容将条目添加到清单中:

    <manifest file="${source}/META-INF/MANIFEST.MF" mode="update">
      <attribute name="Permissions" value="all-permissions"/>
      <attribute name="Codebase" value="${jnlp.codebase}"/>
      <attribute name="Application-Name" value="${app.name}"/>
    </manifest>
    

    Java 7 update 45 broke my Web Start SWT application 也可能有一些有趣的信息

    【讨论】:

    • 啊,就我而言,这是由于使用了 Netbeans。我也误解了它在问什么。我一直在玩弄 JNLP 权限属性,但没有任何改变。 :-) 所以,我想我可以选择玩弄我的 build.xml(考虑到我所处的特定环境,这似乎有风险)或等待并希望 Netbeans 7.3.2 出现并添加此支持。
    • Netbeans 7.4 已经问世。不幸的是,它生成的构建完全无法使用,因为它们会导致“DeployManifestChecker.verifyCodebase”中出现 NumberFormatExceptions。 :-(
    • Netbeans 7.4 中更改了一些默认值。通过将其切换为通用代码库模式,我能够绕过古怪的代码库错误。但是,清单错误仍然存​​在。
    • 现在我通过“jar ufm”(和代码签名脚本)自定义注入所需的清单条目,我必须在 让 Netbeans 完成之后手动运行这些条目。我希望下一个版本的 Netbeans 修复 7.4 的清单和某些证书类型的问题。
    • 更新:Netbeans 8 还没有完全解决这个问题。也许是 8.1... 在此之前,我使用自定义的后期构建脚本将清单条目塞入 .jar。
    【解决方案2】:

    此问题同时影响 JNLP 和小程序。 jar 文件需要在清单文件中具有权限属性。我相信其他错误不那么严重。最新的 JRE 向最终用户显示一条警告消息,指出从 2014 年 1 月开始,最新的 JRE 将拒绝运行任何缺少 Permissions 属性的小程序或 JNLP jar 文件。

    见Java SE7 technotes on manifest。

    Java 教程中有一个关于 modifying the manifest file 的部分,但按照 @mth 的建议使用 ant 执行此操作听起来更简单。

    【讨论】:

      【解决方案3】:

      我可以使用一种变通方法使自签名的 java web start 应用程序工作。 即使我可以在控制台中看到警告,我也不会收到更多警告。 我只需要:

      1. 在清单中添加“Permissions: all-permissions”属性。

      2. 在jnlp文件中添加如下标签:

        <security>
           <all-permissions/>
        </security>
        
      3. 用我自己的密钥库为我的 jar 签名

      4. 在 Java 控制面板中导入我自己的证书(在 Windows 上)。

      【讨论】:

      • 很好的测试信息,所以我会赞成。尽管每次应用程序更改时将我自己的证书导入每个客户端是不可行的,但这对我的特殊情况没有帮助。
      • 在我工作的公司中,我们创建了我们的证书(这是有罪的 10 年......)。然后我们继续修改应用程序..但是证书是一样的
      • 好点,我可以修改我们的构建脚本以重新使用长期证书而不是我们当前的程序。现在,我们会在每次构建时创建一个新证书,有效期仅为 6 个月。
      • 每次使用 jenkins 构建应用程序时,我们都会运行一个 jar 签名脚本。
      【解决方案4】:

      如果您使用的是 maven,只需在插件配置中添加类似这样的内容即可:

             <updateManifestEntries>
               <Permissions>all-permissions</Permissions>
               <Codebase>*</Codebase>
             </updateManifestEntries>
      

      取自插件网站here

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2021-11-25
        相关资源
        最近更新 更多