5 votes

Dans l'intégration de Ant de Jruby Rake, stratégies pour gérer le support de l'espace de noms xml de Ant.

J'essaie d'utiliser les tâches ant de JavaFX à partir de rake, et je n'arrive pas à comprendre comment gérer l'espacement des noms xml : http://ant.apache.org/manual/Types/namespace.html

Un fichier build.xml effectuant un travail similaire ressemblerait à quelque chose comme ceci :

<?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>

Le problème vient avec ces tâches comme "fx:deploy", quand je commence à convertir cela en un fichier Rake, je ne peux pas aller loin parce que je n'arrive pas à trouver comment dire à ant à propos de l'espace de noms "fx". J'ai cherché pendant quelques jours, mais tout ce que j'ai trouvé, c'est un article de blog de headius qui dit "note to self : figure out if we have an equivalent for that" ( http://headius.blogspot.com/2010/04/using-ivy-with-jruby-15s-ant.html ). Dans son exemple, il semblait pouvoir l'ignorer, mais cela ne fonctionne pas dans ce cas.

Les tâches d'empaquetage JavaFX proposent des choses vraiment intéressantes, surtout à partir de Java 8, notamment la possibilité de créer des installateurs natifs pour chaque plateforme à partir de n'importe quel fichier jar exécutable. Je pense que cela pourrait être très utile.

2voto

Thomas Enebo Points 782

Ok, il nous manque un peu de magie, mais tout n'est pas perdu, j'ai une solution. Pour appeler une tâche XML à espace de noms, il faut envoyer une requête à l'uri xml pleinement qualifiée. C'est un peu moche mais pas autant que ça aurait pu l'être puisque seul le parent supérieur a besoin de faire ce hack et que les éléments qualifiés enfants sont relatifs à leur parent donc ils n'ont pas besoin de faire un envoi. J'ai ajouté un problème d'amélioration pour cela aquí :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X