5

rake から JavaFX の ant タスクを使用しようとしていますが、xml-namespacing の処理方法がわかりません: http://ant.apache.org/manual/Types/namespace.html

同様の作業を行う build.xml ファイルは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorldApp" default="default" basedir="."
         xmlns:fx="javafx:com.sun.javafx.tools.ant">
    <path id="fxant">
      <filelist>
        <file name="${java.home}\..\lib\ant-javafx.jar"/>
        <file name="${java.home}\lib\jfxrt.jar"/>
      </filelist>
    </path>
    <target name="default">
        <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
                uri="javafx:com.sun.javafx.tools.ant"
                classpath="${java.home}\..\lib\ant-javafx.jar"/>
    </target>
<target name="package-bundle">
      <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
                uri="javafx:com.sun.javafx.tools.ant"
                classpath="${java.home}\..\lib\ant-javafx.jar"/>
      <fx:deploy nativeBundles="all"
                   width="100" height="100"
                   outdir="build/" outfile="HelloWorldApp">
            <info title="Hello World App" vendor="Me"
                     description="Test built from Java executable jar"/>
            <fx:application mainClass="org.jruby.JarBootstrapMain"/>
            <fx:resources>
               <fx:fileset dir="dist">
                  <include name="HelloWorldApp.jar"/>
               </fx:fileset>
            </fx:resources>
      </fx:deploy>
</target>
</project>

問題は、「fx:deploy」などのタスクで発生します。これを Rakefile に変換し始めると、その「fx」名前空間について ant に伝える方法がわからないため、うまくいきません。数日間検索しましたが、見つかったのは headius からのブログ投稿だけでした。 /2010/04/using-ivy-with-jruby-15s-ant.html )。彼の例では、彼はそれを無視できるように見えましたが、この例ではうまくいきません。

JavaFX パッケージ化タスクは、実行可能な jar からすべてのプラットフォーム用のネイティブ インストーラーを作成する機能など、特に Java 8 以降の非常に優れた機能を提供します。これは本当に便利だと思います。

4

1 に答える 1

2

わかりましたので、いくつかの魔法が欠けていますが、すべてが失われるわけではありません。回避策があります。XML 名前空間タスクを呼び出すには、完全修飾 xml uri に送信する必要があります。これは少し醜いですが、最上位の親のみがこのハックを行う必要があり、子修飾要素は親に対して相対的であるため、送信も行う必要がないため、それほど醜くはありません。ここに拡張の問題を追加しました:

require 'ant'

task :default do
  ant.echo message: "${java.home}"
  ant.taskdef(resource: "com/sun/javafx/tools/ant/antlib.xml",
              uri: "javafx:com.sun.javafx.tools.ant",
              classpath: "${java.home}/../lib/ant-javafx.jar")
end

task :package_bundle do
  ant do
    taskdef(resource: "com/sun/javafx/tools/ant/antlib.xml",
            uri: "javafx:com.sun.javafx.tools.ant",
            classpath: "${java.home}/../lib/ant-javafx.jar")
    __send__("javafx:com.sun.javafx.tools.ant:deploy", nativeBundles: "all", 
             width: "100", height: "100", outdir: "build/",
             outfile: "HelloWorldApp") do
      info(title: "Hello World App", vendor: "Me",
           description: "Test built from Java executable jar")
      application(mainClass: "org.jruby.JarBootstrapMain")
      resources do
        fileset(dir: "dist") do
          include name: "HelloWorldApp.jar"
        end
      end
    end
  end
end
于 2013-01-17T16:42:44.583 に答える