最近のJavaの更新により、多くの人はJava Codebase
、Permissions
のない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
これを修正するにはどうすればよいですか?
(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
sに書き込まれます。 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
sに署名する必要があります!
注:ライブラリ構造を変更する場合を除き、ライブラリに署名/展開する必要があるのは1回だけです。つまり、アプリを更新しているが、ライブラリのマニフェストが既に変更され、適切に署名され、デプロイされている場合、アプリからライブラリを追加/削除しない限り、ライブラリを再署名/デプロイする必要はありません。
注#2:現在のバージョンのNetbeansは、Codebase
およびPermissions
マニフェスト属性をprimary .jar onlyに追加します、しかしあなたのライブラリではない。 Netbeansを使用している場合、重複するマニフェスト属性を追加しようとすると、jar
ユーティリティから警告が表示されます。これを修正するためにキューにバグレポートがあります https://netbeans.org/bugzilla/show_bug.cgi?id=234231 。
編集:Netbeansの最新バージョン(8.0)は、3つすべて(Codebase
、Permissions
、およびApplication-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
この方法で解決できます:
control panel
を開始
Java Control Panel
を選択します
Security
タブを選択します
Exception Site list
で[Edit Site List
]ボタンをクリックします
Add
ボタンをクリックします。
サーバーのルート(例:: https://ibank.cib.h )を入力し、OK
を押します
ブラウザ/アプリケーションを再起動します。
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>
Netbeansを使用する場合、ファイルnbproject/project.propertiesでこれらの属性を設定します。
最後の1つは、Netbeans> = 8.0でのみサポートされています( here を参照)。その他はNetbeans 7.2でも動作するはずです。 jnlp.mixed.codeもtrusted_onlyに設定していますが、おそらくあなたの場合は適切ではありません。 Netbeansの最新バージョンに切り替えることができない場合、ご自身の責任でファイルjnlp-impl.xmlを変更できます。
netbeansを使用しない場合は、atulsmの提案が優れています。