簡體   English   中英

如何在我的JNLP應用程序中修復“缺少代碼庫,權限和應用程序名稱清單屬性”?

[英]How do I fix “missing Codebase, Permissions, and Application-Name manifest attribute” in my JNLP app?

隨着最近的Java更新,許多人在使用缺少CodebasePermissionsApplication-name manifest屬性的Java Web Start應用程序時遇到了問題。 雖然有資源可以幫助你實現這一目標,但我找不到任何關於這個問題的全面答案,我覺得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

我該如何解決?

(1)首先,您需要創建一個包含要添加的所有屬性的文本文件。 我的文本文件如下所示:

Permissions: all-permissions
Codebase: http://www.codebase.com/myApp/dist
Application-Name: My Application

我把它命名為addToManifest.txt 顯然,您需要更改參數以滿足應用程序的需求。

(2)接下來,您需要將其添加到主.jar和所有庫中。 執行此操作的命令是:

jar ufm dist\myApp.jar addToManifest.txt

當然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
...

(注意:在Windows上,我為此寫了一個.bat文件。)

執行此操作后,應將屬性寫入.jar 您可以在zip管理器(如7-Zip)中打開.jars,解壓縮MANIFEST.MF文件,在文本編輯器中打開它,您應該看到列出的屬性。

(3)添加屬性后,您需要重新設置應用程序。 執行此操作的命令是:

jarsigner dist\myApp.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password

您還需要為所有庫執行此操作:

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

之后,應添加您的屬性,並且您的.jar應該簽名!

注意:除非要更改庫結構,否則只需要對庫進行一次簽名/部署。 也就是說,如果您正在更新您的應用程序,但是庫已經更改了清單,正確簽名並進行了部署,則除非您從應用程序添加/刪除庫,否則無需重新簽名/部署庫。

注意#2:Netbeans的當前版本僅將CodebasePermissions清單屬性添加到主.jar ,但不添加到您的庫。 如果使用Netbeans,則在嘗試添加重復的清單屬性時,將從jar實用程序收到警告。 隊列中有一個錯誤報告,以便修復此問題https://netbeans.org/bugzilla/show_bug.cgi?id=234231

編輯:最新版本的Netbeans(8.0)現在將所有三個( CodebasePermissionsApplication-Name )添加到清單中。

另一種方法是在構建腳本本身中處理它。

第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> 

第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>

如果錯誤消息如下所示:

Missing Application-Name manifest attribute for: server root/filename.jar

你可以這樣解決:

  1. 啟動control panel

  2. 選擇Java Control Panel

  3. 選擇Security選項卡

  4. 在“ Exception Site list單擊“ Edit Site List按鈕

  5. 單擊“ Add按鈕。

  6. 鍵入服務器根目錄(例如: https : //ibank.cib.hu ),然后按OK

  7. 重啟瀏覽器/應用程序。

資源在這里。

如果使用Netbeans,請在文件nbproject / project.properties中設置這些屬性:

  • manifest.custom.codebase
  • manifest.custom.permissions
  • manifest.application.name.attribute

最后一個只受Netbeans支持> = 8.0(見這里 )。 其他人甚至應該在Netbeans 7.2中工作。 我也將jnlp.mixed.code設置為trusted_only但可能在你的情況下不合適。 如果無法切換到更新版本的Netbeans,您可以自行修改文件jnlp-impl.xml。

如果你不使用Netbeans,atulsm的建議會更好。

manifest添加到jar和簽名罐子的示例..

<target name="-post-compile">
        <jar destfile="${build.web.dir}/jars/app.jar" >
            <fileset dir="${build.classes.dir}">
                <include name="com/sample/test/client/**/*.*"/>
                <include name="com/sample/test/share/**/*.*"/>
            </fileset>
            <manifest>
                <attribute name="Author" value="${user.name}"/>
                <attribute name="Permissions" value="all-permissions"/>
                <attribute name="Codebase" value="http://localhost:8080/app/"/>
                <attribute name="Application-Name" value="App"/>
            </manifest>
        </jar>
        <signjar keystore="app.keystore"  storepass="test"  jar="${build.web.dir}/jars/app.jar" alias="tomcat" />


        <copyfiles files="${file.reference.javadatepicker.jar}" todir="${build.web.dir}/jars"/>


        <delete dir="${build.web.dir}/WEB-INF/classes/com/sample/app/client"/>
        <!--keytool -genkey -alias tomcat -keystore app.keystore -keypass test -storepass test -validity 1960-->
        <signjar keystore="app.keystore"  storepass="test"  jar="${build.web.dir}/jars/javadatepicker.jar" alias="tomcat" />

    </target>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM