Pertanyaan Bagaimana cara saya memperbaiki "kehilangan basis kode, Izin, dan atribut manifes Aplikasi-Nama" di aplikasi JNLP saya?


Dengan pembaruan Java baru-baru ini, banyak orang mengalami masalah dengan aplikasi Java Web Start mereka yang kurang Codebase, Permissions, dan Application-name atribut nyata. Meskipun ada sumber daya di luar sana untuk membantu Anda mencapai hal ini, saya tidak dapat menemukannya luas jawaban atas pertanyaan ini, saya jadi saya merasa Q-and-A akan bagus. Jadi, inilah pertanyaannya:

Aplikasi Java Web Start saya menampilkan peringatan berikut di konsol:

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

Bagaimana saya memperbaikinya?


29
2017-10-29 13:08


asal


Jawaban:


(1) Pertama, Anda perlu membuat file teks dengan semua atribut yang ingin Anda tambahkan. File teks saya terlihat seperti ini:

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

Saya menamainya addToManifest.txt. Tentunya, Anda harus mengubah parameter agar sesuai dengan kebutuhan aplikasi Anda.

(2) Selanjutnya, Anda perlu menambahkan ini ke utama .jar dan semua pustaka juga. Perintah untuk melakukan ini adalah:

jar ufm dist\myApp.jar addToManifest.txt

tentu saja dist\myApp.jar perlu menunjukkan apa pun yang menjadi tujuan utama Anda. Anda juga harus melakukan ini untuk semua perpustakaan juga.

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

(Catatan: di Windows, saya menulis a .bat file untuk ini.)

Setelah Anda melakukan ini, atribut harus ditulis ke .jars. Anda dapat membuka .jars dalam zip manager (seperti 7-Zip), ekstrak MANIFEST.MF file, buka di editor teks, dan Anda akan melihat atribut yang tercantum.

(3) Setelah menambahkan atribut, Anda harus mengundurkan diri dari aplikasi Anda. Perintah untuk melakukan itu adalah:

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

Anda juga harus melakukan ini untuk semua perpustakaan Anda juga:

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

Setelah itu, atribut Anda harus ditambahkan dan Anda .jars harus ditandatangani!

CATATAN: Anda hanya perlu menandatangani / menyebarkan pustaka satu kali kecuali Anda mengubah struktur pustaka. yaitu, jika Anda memperbarui aplikasi tetapi pustaka telah mengubah manifesnya, ditandatangani dengan benar, dan diterapkan, Anda tidak perlu mengundurkan diri / menyebarkan pustaka kecuali Anda menambahkan / menghapus pustaka dari aplikasi Anda.

CATATAN # 2: Versi Netbeans saat ini akan ditambahkan Codebase dan Permissions atribut nyata untuk Anda hanya .jar primer, tapi tidak ke perpustakaan Anda. Jika Anda menggunakan Netbeans, Anda akan menerima peringatan dari jar utilitas saat Anda mencoba menambahkan atribut manifes duplikat. Ada laporan bug dalam antrian untuk memperbaikinya https://netbeans.org/bugzilla/show_bug.cgi?id=234231.

EDIT: Versi terbaru Netbeans (8.0) sekarang menambahkan ketiganya (Codebase, Permissions, dan Application-Name) kepada manifes untuk Anda.


41
2017-10-29 13:08



Cara lain bisa menanganinya di skrip build Anda sendiri.

Langkah 1: Tentukan target untuk diperbarui

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

Langkah 2: Hubungi target pembaruan dan gunakan manifes baru di 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>

9
2017-10-30 06:16



Jika pesan kesalahan terlihat seperti ini:

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

Anda bisa menyelesaikannya dengan cara ini:

  1. Mulai control panel

  2. Memilih Java Control Panel 

  3. Memilih Security tab

  4. Di Exception Site list klik Edit Site List tombol

  5. Klik Add tombol.

  6. Ketik root server (mis .:https://ibank.cib.hu), dan tekan OK 

  7. Mulai ulang browser / aplikasi Anda.

Sumber daya di sini.


3
2018-01-23 08:32



Jika Anda menggunakan Netbeans, atur atribut tersebut di file Anda nbproject / project.properties:

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

Yang terakhir hanya didukung oleh Netbeans> = 8.0 (lihat sini). Yang lain harus bekerja bahkan di Netbeans 7.2. Saya juga mengatur jnlp.mixed.code menjadi trusted_only, tetapi mungkin tidak sesuai untuk Anda. Anda dapat memodifikasi file jnlp-impl.xml dengan risiko Anda sendiri jika Anda tidak dapat beralih ke versi Netbeans yang lebih baru.

saran atulsm lebih baik jika Anda tidak menggunakan Netbeans.


2
2018-04-17 12:59



Sampel untuk ditambahkan manifest to jar and signing jars ..

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

2
2018-05-16 07:27