web-dev-qa-db-ja.com

JNLPアプリで「コードベース、権限、およびアプリケーション名マニフェスト属性の欠落」を修正するにはどうすればよいですか?

最近のJavaの更新により、多くの人はJava CodebasePermissionsのないWeb Startアプリに問題を抱えています。およびApplication-nameマニフェスト属性。これを達成するのに役立つリソースはありますが、この質問に対する包括的の答えが見つかりませんでしたので、質疑応答が良いと感じました。だから、ここに質問があります:

My 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

これを修正するにはどうすればよいですか?

29
ryvantage

(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ファイルを作成しました。)

これを行うと、属性は.jarsに書き込まれます。 Zipマネージャー(7-Zipなど)で.jarを開き、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

その後、属性を追加し、.jarsに署名する必要があります!

注:ライブラリ構造を変更する場合を除き、ライブラリに署名/展開する必要があるのは1回だけです。つまり、アプリを更新しているが、ライブラリのマニフェストが既に変更され、適切に署名され、デプロイされている場合、アプリからライブラリを追加/削除しない限り、ライブラリを再署名/デプロイする必要はありません。

注#2:現在のバージョンのNetbeansは、CodebaseおよびPermissionsマニフェスト属性をprimary .jar onlyに追加します、しかしあなたのライブラリではない。 Netbeansを使用している場合、重複するマニフェスト属性を追加しようとすると、jarユーティリティから警告が表示されます。これを修正するためにキューにバグレポートがあります https://netbeans.org/bugzilla/show_bug.cgi?id=234231

編集:Netbeansの最新バージョン(8.0)は、3つすべて(CodebasePermissions、およびApplication-Name)をマニフェストに追加するようになりました。

41
ryvantage

別の方法は、ビルドスクリプト自体で処理することです。

ステップ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>
9
Atul Soman

エラーメッセージが次のような場合:

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.h )を入力し、OKを押します

  7. ブラウザ/アプリケーションを再起動します。

ここのリソース。

3
user669677

manifestをjarに追加し、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>
2
nikli

Netbeansを使用する場合、ファイルnbproject/project.propertiesでこれらの属性を設定します。

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

最後の1つは、Netbeans> = 8.0でのみサポートされています( here を参照)。その他はNetbeans 7.2でも動作するはずです。 jnlp.mixed.codeもtrusted_onlyに設定していますが、おそらくあなたの場合は適切ではありません。 Netbeansの最新バージョンに切り替えることができない場合、ご自身の責任でファイルjnlp-impl.xmlを変更できます。

netbeansを使用しない場合は、atulsmの提案が優れています。

2
gouessej