如何在我的JNLP应用程序中修复"缺少代码库,权限和应用程序名称清单属性"?

ryv*_*age 29 java jnlp java-web-start

随着最新的Java更新,很多人都与他们的Java Web Start的麻烦应用程式缺乏Codebase,PermissionsApplication-name清单属性.虽然有资源可以帮助你实现这一目标,但我找不到任何关于这个问题的全面答案,我觉得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
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

ryv*_*age 41

(1)首先,您需要创建一个包含要添加的所有属性的文本文件.我的文本文件如下所示:

Permissions: all-permissions
Codebase: http://www.codebase.com/myApp/dist
Application-Name: My Application
Run Code Online (Sandbox Code Playgroud)

我把它命名了addToManifest.txt.显然,您需要更改参数以满足应用程序的需求.

(2)接下来,您需要将其添加到主.jar和所有库中.执行此操作的命令是:

jar ufm dist\myApp.jar addToManifest.txt
Run Code Online (Sandbox Code Playgroud)

当然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
...
Run Code Online (Sandbox Code Playgroud)

(注意:在Windows上,我为此写了一个.bat文件.)

执行此操作后,应将属性写入.jars.您可以在zip管理器(如7-Zip)中打开.jars,解压缩MANIFEST.MF文件,在文本编辑器中打开它,您应该看到列出的属性.

(3)添加属性后,您需要重新设置应用程序.执行此操作的命令是:

jarsigner dist\myApp.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
Run Code Online (Sandbox Code Playgroud)

您还需要为所有库执行此操作:

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
Run Code Online (Sandbox Code Playgroud)

之后,应添加您的属性并.jar签署您的s!

注意:除非要更改库结构,否则只需要对库进行一次签名/部署.也就是说,如果您正在更新您的应用程序,但是库已经更改了清单,正确签名并进行了部署,则除非您从应用程序添加/删除库,否则无需重新签名/部署库.

注意#2:当前版本的Netbeans将向您的主.jar添加CodebasePermissions显示属性,但不会向您的库添加和显示属性.如果使用Netbeans,则在尝试添加重复的清单属性时,将从实用程序收到警告.队列中有一个错误报告,以便修复此问题https://netbeans.org/bugzilla/show_bug.cgi?id=234231.jar

编辑:Netbeans的(8.0)的最新版本现在增加了三个(Codebase,Permissions,和Application-Name)的清单给你.


Atu*_*man 9

另一种方法是在构建脚本本身中处理它.

第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> 
Run Code Online (Sandbox Code Playgroud)

第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>
Run Code Online (Sandbox Code Playgroud)