2012-02-15 24 views
23

È possibile fare riferimento a JavaFX 2.0 come dipendenza in Maven nel pom.xml in modo che tutto funzioni correttamente?JavaFX 2 come dipendenza Maven

ho visto in this question che è possibile installare il jfxrt.jar a livello locale, ma idealmente mi piacerebbe un approccio più semplice in cui la dipendenza può essere adeguatamente risolto e scaricato senza alcun hack locali ....

risposta

12

No, una tale soluzione non esiste per il momento. Dubito che lo sarà mai, poiché come da Java 1.7 aggiornamento 2, JavaFX è installato insieme alla JVM. I piani includono JavaFX nel JRE a partire da Java 1.8 (l'anno prossimo). Da quel momento in poi, non avresti bisogno di una dipendenza.

Tuttavia è già possibile utilizzare Maven con JavaFX, poiché Maven può richiamare attività Ant (plug antrun) e sono disponibili attività super Ant con la distribuzione JavaFX. L'ho scritto sul blog, ma è in francese: Creer un projet Maven pour JavaFX2. Ti guida attraverso l'intero processo. Tuttavia, se non capisci il francese, lascia un commento all'articolo e cercherò di aiutarti o guardare qui in the Oracle forum

+0

Aggiungendo a questo già buona risposta, solo che mi piace per puntare al post di Adam Bien: http://www.adam-bien.com/roller/abien/entry/how_to_compile_java_fx –

6

L'articolo di Sergey suggerisce di aggiungere javafx come dipendenza di sistema, che non dovrebbe essere Usato. Invece, puoi inserire quanto segue nel tuo POM per installare javafx automaticamente.

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

Se si desidera avere Documentazione API installati, zip i contenuti della della cartella docs/api a docs/api.zip. Ora devi solo eseguire maven, con il profilo attivato e le proprietà jfx-runtime e jfx-version impostate.

+0

First volta ho visto questa soluzione e convinto che questo sia il modo giusto per farlo. Vorrei che questo fosse il modo più consigliato. Come suggerisci di gestire '$ {jfx-runtime}' e '$ {jfx-version}'. Basta codificarli nella sezione ''? – metasim

+0

Ho la versione codificata nelle proprietà, perché posso riutilizzarla nelle dipendenze. Il percorso di runtime non dovrebbe essere codificato, perché dipende dalla piattaforma. – Cephalopod

+0

Questo è il tipico modo "corretto"/approvato che evita la dipendenza dal sistema. E '* anche * il modo complicato mostruosamente tipico (per evitare la dipendenza del sistema) – javadba

14

ecco una possibile soluzione.

Creare una cartella lib nella directory del progetto e mettere la jfxrt.jar in quella directory.

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

E se si vuole costruire un jar eseguibile solamente necessario includere il javafx-maven-plugin. Per ulteriori informazioni si veda: 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

io uso java.home invece di project.basedir, il che significa che non c'è bisogno di mettere jfxrt.jar nel mio progetto. – disrvptor