FXShellはSandboxで動かない

将来的にはShellが整備されるかCompilerが一般的になるかでまともに動くようになると思うのだけど、現状ではWeb StartからFX Scriptを動かそうと思うとJARファイルに署名するしかない。
以下はNetBeans*1のWebアプリケーションプロジェクトでJavaFX ApplicationプロジェクトのJARファイルをWeb Startで配布する設定のメモ。
今回はJNLPJSPで生成するためWeb Startモジュールは使わず*2、Webアプリケーションプロジェクト側で署名する。

  • プロジェクト > Webアプリケーションプロジェクト > プロパティー > パッケージング
    • プロジェクトを追加
      • JavaFX Applicationプロジェクトフォルダを選択
    • ライブラリを追加
  • 了解
  • ファイル > Webアプリケーションプロジェクト > build.xml
    • signjarタスクを含む-post-compileターゲットを追加(後述ソースコード参照)
  • 保存
  • プロジェクト > Webアプリケーションプロジェクト > 新規 > JSP...
  • メニュー > 実行 > ファイルを実行

以上でJava Web StartからFXアプリケーションが立ち上がれば成功。

ソースコード

Antターゲット

build.xmlのproject要素の末尾に追加。
そこらにあるJARファイル全部に署名してしまうので注意。

<target name="-post-compile">
    <signjar keystore="keystoreのパス" alias="keystoreのエイリアス" storepass="keystoreのパスワード">
        <fileset dir="${build.web.dir.real}" includes="*.jar" />
    </signjar>
</target>
JNLP生成用JSPXスクリプト

URLをハードコーディングしたくないので用意した。JnlpDownloadServletを使えばバージョン管理もできる。

<?xml version="1.0" encoding="UTF-8"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">
    <jsp:directive.page contentType="application/x-java-jnlp-file;charset=UTF-8"/>
    <jsp:output omit-xml-declaration="false"/>
    <jnlp spec="1.5+"
        codebase="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.servletContext.contextPath}"
        href="JNLP生成用JSPXスクリプト自身のファイル名">
        <information>
            <title>任意</title>
            <vendor>任意</vendor>
        </information>
        <resources>
            <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
            <jar href="javafxrt.jar"/>
            <jar href="Filters.jar"/>
            <jar href="swing-layout.jar"/>
            <jar href="JavaFX ApplicationプロジェクトのJARファイル"/>
        </resources>
        <security><all-permissions/></security>
        <application-desc main-class="net.java.javafx.FXShell">
            <argument>JavaFX Applicationプロジェクトのメインクラス</argument>
        </application-desc>
    </jnlp>
</jsp:root>

*1:5.5.1

*2:FXのプロジェクトでWeb Startが使えるかどうかは調べてない