jnlpからアプリケーションを起動すると、メッセージが表示されます
「Missing Codebase manifest attribute for:xxx.jar
"
どういう意味ですか?
JREを1.7u25に更新した後に内部アプリケーションを実行しているときにも、これに遭遇しました。警告は、不正なコードの再利用を防ぐために1.7u25で導入された新しいセキュリティ機能のために表示されます。私の場合、アプリケーションにPCへのアクセスを許可するかどうかを確認するダイアログも表示されました。
Jarファイルにアクセスできる場合は、Permissions
とCodebase
の2つの属性を追加します。アプリケーションがPC上のすべてにアクセスする必要があるかどうかを決定する必要があります。その場合、Permissions
属性にall-permissions
の値を使用します。それ以外の場合は、sandbox
を使用すると、JREがPC上のコードのアクセスレベルを制限します。 jarファイルが別のURLからダウンロードされている場合を除き、Codebase
はおそらくjnlpファイルのコードベースと同じである必要があり、その場合はそのURLである必要があります。
Peterの答えに続いて、これはNetbeansとJavaFXを使用している場合に、自動化された方法で問題を解決する方法です。
Netbeans 7.3.1では、この「バグ」はまだ修正されていません(コードベースとパーミッションをマニフェストに追加しません)。 Netbeansを使用してプロジェクトをビルドし、不足している属性を手動で追加(および.jarに再署名)したくない場合は、build.xmlを編集し、次のANTターゲットとマクロを追加できます。
<target name="-post-jfx-jar">
<update-libs-manifest />
<update-jar-manifest jarfile="${jfx.deployment.dir}${file.separator}${jfx.deployment.jar}" />
</target>
<macrodef name="update-libs-manifest">
<sequential>
<property name="pp_rebase_dir" value="${basedir}${file.separator}${dist.dir}${file.separator}lib"/>
<property name="pp_rebase_fs" value="*.jar"/>
<condition property="manifest.codebase" value="${manifest.custom.codebase}" else="*">
<and>
<isset property="manifest.custom.codebase" />
<not>
<equals arg1="${manifest.custom.codebase}" arg2="" trim="true" />
</not>
</and>
</condition>
<condition property="manifest.permissions" value="all-permissions" else="sandbox">
<isset property="permissions-elevated" />
</condition>
<echo message="Updating libraries manifest => Codebase: ${manifest.codebase} / Permissions: ${manifest.permissions}" />
<script language="javascript">
<![CDATA[
var dir = project.getProperty("pp_rebase_dir");
var fDir = new Java.io.File(dir);
if( fDir.exists() ) {
var callTask = project.createTask("antcall");
callTask.setTarget("-update-jar-macro-call");
var param = callTask.createParam();
param.setName("jar.file.to.rebase");
var includes = project.getProperty("pp_rebase_fs");
var fs = project.createDataType("fileset");
fs.setDir( fDir );
fs.setIncludes(includes);
var ds = fs.getDirectoryScanner(project);
var srcFiles = ds.getIncludedFiles();
for (i=0; i<srcFiles.length; i++) {
param.setValue(dir + "${file.separator}" + srcFiles[i]);
callTask.perform();
}
}
]]>
</script>
</sequential>
</macrodef>
<target name="-update-jar-macro-call">
<update-jar-manifest jarfile="${jar.file.to.rebase}"/>
</target>
<macrodef name="update-jar-manifest">
<attribute name="jarfile"/>
<sequential>
<echo message="jarfile = @{jarfile}" />
<jar file="@{jarfile}" update="true">
<manifest>
<attribute name="Codebase" value="${manifest.codebase}"/>
<attribute name="Permissions" value="${manifest.permissions}"/>
</manifest>
</jar>
</sequential>
</macrodef>
その後、manifest.custom.codebase=<your_codebase>
をproject.propertiesに追加するだけです。例:manifest.custom.codebase=localhost
重要:このコードは、NetbeansのデフォルトのANTビルドプロセスを使用するJavaFXアプリケーション用です。そうでない場合は、それに応じて更新する必要があります。最初のターゲット(<target name="-post-jfx-jar">
)、プロパティ名、およびpermissions-elevated
プロパティをチェックする条件を変更する必要があります。
言及したエラーに関する詳細な説明を参照してください。 http://docs.Oracle.com/javase/7/docs/technotes/guides/jweb/no_redeploy.html
私が見つけたものは次のとおりです。
原因
Java 7 Update 51で始まり、Javaは外部のエクスプロイトに対するユーザーシステムの脆弱性を軽減するためにセキュリティモデルを強化しました。Javaでは、ユーザーは署名されていない(署名なし)、自己署名された(信頼された機関によって署名されていない)アプリケーション、および権限属性がないアプリケーションを実行できません。
TopCoder Arenaの起動時に問題が発生しました。以下のリンクを使用して簡単に削除できます。