30

Codebase最近の Java の更新により、Java Web Start アプリで 、Permissions、およびApplication-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

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

4

5 に答える 5

41

(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

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

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

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

編集: Netbeans (8.0) の最新バージョンでは、3 つすべて ( CodebasePermissions、およびApplication-Name) がマニフェストに追加されます。

于 2013-10-29T13:08:31.207 に答える
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> 

ステップ 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>
于 2013-10-30T06:16:31.000 に答える
3

エラー メッセージが次のようになっている場合:

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. ブラウザ/アプリケーションを再起動します。

リソースはこちら。

于 2014-01-23T08:32:48.650 に答える
2

jarへの追加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>
于 2016-05-16T07:27:33.870 に答える
2

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

  • manifest.custom.codebase
  • マニフェスト.カスタム.パーミッション
  • manifest.application.name.attribute.

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

Netbeans を使用しない場合は、atulsm の提案の方が適切です。

于 2015-04-17T12:59:49.580 に答える