2012-02-15 23 views
23

¿Es posible hacer referencia a JavaFX 2.0 como una dependencia en Maven en el pom.xml para que todo funcione sin problemas?JavaFX 2 como una dependencia de Maven

que vi en this question que es posible instalar el jfxrt.jar localmente, pero lo ideal es que me gustaría un enfoque más simple, donde la dependencia puede ser resuelto y descargarse sin ningún tipo de cortes locales adecuadamente ....

Respuesta

12

No, tal solución no existe por el momento. Dudo que lo haga, ya que desde Java 1.7 actualización 2, JavaFX se instala junto con la JVM. Los planes incluyen incluir JavaFX en JRE a partir de Java 1.8 (el próximo año). A partir de ese momento, no necesitarías una dependencia en absoluto.

Sin embargo, ahora puede usar Maven con JavaFX, porque Maven puede llamar a las tareas Ant (plugin antrun) y hay tareas súper Ant disponibles con la distribución JavaFX. Hice un blog sobre esto, pero está en francés: Creer un projet Maven pour JavaFX2. Te guía a través de todo el proceso. Sin embargo, si no entiende francés, deje un comentario sobre el artículo e intentaré ayudarle o buscar aquí en the Oracle forum

+0

Agregando a esto ya buena respuesta, al igual que para apuntar a cargo de Adam Bien: http://www.adam-bien.com/roller/abien/entry/how_to_compile_java_fx –

6

El artículo de Sergey sugiere agregar javafx como una dependencia del sistema, que no debería ser usado. En su lugar, puede incluir lo siguiente en su POM para instalar javafx automáticamente.

<profile> 
     <id>install-javafx</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-install-plugin</artifactId> 
        <version>2.3.1</version> 
        <executions> 
         <execution> 
          <id>install-javafx</id> 
          <goals> 
           <goal>install-file</goal> 
          </goals> 
          <phase>validate</phase> 
          <configuration> 
           <file>${jfx-runtime}/lib/jfxrt.jar</file> 
           <groupId>javafx</groupId> 
           <artifactId>javafx</artifactId> 
           <version>${jfx-version}</version> 
           <packaging>jar</packaging> 
           <javadoc>${jfx-runtime}/../docs/api.zip</javadoc> 
         <!--<sources>no source available</sources>--> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin>      
       <plugin> 
        <artifactId>maven-resources-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>install-javafx-bin</id> 
          <phase>validate</phase> 
          <goals> 
           <goal>copy-resources</goal> 
          </goals> 
          <configuration> 
           <outputDirectory>${settings.localRepository}/javafx/javafx</outputDirectory> 
           <useBuildFilters>false</useBuildFilters> 
           <resources> 
            <resource> 
             <directory>${jfx-runtime}</directory> 
             <includes> 
              <include>bin/*.dll</include> 
             </includes> 
            </resource> 
           </resources>    
          </configuration>    
         </execution> 
        </executions> 
       </plugin> 
      </plugins>  
     </build> 
    </profile> 

Si usted quiere tener instalados API Docs, zip de los contenidos de la carpeta docs/API para docs/api.zip. Ahora solo tiene que ejecutar maven, con el perfil activado y las propiedades jfx-runtime y jfx-version establecidas.

+0

Primera vez que he visto esta solución, y estoy convencido de que esta es la manera correcta de hacerlo. Desearía que esta fuera la forma más recomendada. ¿Cómo sugieres que manejemos '$ {jfx-runtime}' y '$ {jfx-version}'. Simplemente codifíquelos en la sección ''? – metasim

+0

Tengo la versión codificada en las propiedades, porque luego puedo reutilizarla en las dependencias. La ruta de tiempo de ejecución no debe estar codificada, porque depende de la plataforma. – Cephalopod

+0

Esta es la forma típica "correcta"/aprobada que evita la dependencia del sistema. Es * también * la forma monstruosamente complicada típica (para evitar la dependencia del sistema) – javadba

14

aquí hay una posible solución.

Cree una carpeta lib en su directorio de proyectos y coloque el jfxrt.jar en ese directorio.

<dependency> 
    <groupId>com.oracle</groupId> 
    <artifactId>javafx</artifactId> 
    <version>2.2.3</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/jfxrt.jar</systemPath> 
</dependency> 

Y si usted quiere construir un jar ejecutable sólo necesita incluir el javafx-maven-plugin. Para más información ver: link-to-github

<plugin> 
     <groupId>com.zenjava</groupId> 
     <artifactId>javafx-maven-plugin</artifactId> 
     <version>1.3</version> 
     <configuration> 
      <mainClass>[put your application main class here]</mainClass> 
     </configuration> 
</plugin> 
+0

Uso java.home en lugar de project.basedir, lo que significa que no necesito poner jfxrt.jar en mi proyecto. – disrvptor