2012-02-15 8 views
23

Est-il possible de référencer JavaFX 2.0 en tant que dépendance dans Maven dans le fichier pom.xml pour que tout fonctionne correctement?JavaFX 2 en tant que dépendance Maven

j'ai vu dans this question qu'il est possible d'installer le jfxrt.jar localement, mais idéalement, je voudrais une approche plus simple où la dépendance peut être correctement résolu et téléchargé sans hacks locaux ....

Répondre

12

Non, une telle solution n'existe pas pour le moment. Je doute que ce sera jamais, puisque à partir de Java 1.7 mise à jour 2, JavaFX est installé avec la JVM. Les plans doivent inclure JavaFX dans le JRE à partir de Java 1.8 (l'année prochaine). A partir de là, vous n'auriez plus besoin d'une dépendance.

Cependant, vous pouvez déjà utiliser Maven avec JavaFX, car Maven peut appeler des tâches Ant (plugin antrun) et il existe des tâches super Ant disponibles avec la distribution JavaFX. J'ai blogué à ce sujet, mais c'est en français: Creer un projet Maven pour JavaFX2. Il vous guide tout au long du processus. Néanmoins, si vous ne comprenez pas le français, laissez un commentaire sur l'article et je vais essayer de vous aider ou de regarder ici the Oracle forum

+0

Ajoutant à cela déjà une bonne réponse, j'aime juste pointer vers le poste d'Adam Bien: http://www.adam-bien.com/roller/abien/entry/how_to_compile_java_fx –

6

L'article de Sergey suggère d'ajouter javafx comme une dépendance du système, qui ne devrait pas être utilisé. Au lieu de cela, vous pouvez inclure les éléments suivants dans votre POM pour installer javafx automatiquement.

<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 vous voulez avoir installé docs api, zip le contenu du dossier docs/api docs/api.zip. Il vous suffit maintenant de lancer maven, avec le profil activé et les propriétés jfx-runtime et jfx-version définies.

+0

Première J'ai déjà vu cette solution et je suis convaincu que c'est la bonne façon de le faire. Je souhaite que ce soit le moyen le plus préconisé. Comment suggérez-vous que nous gérons '$ {jfx-runtime}' et '$ {jfx-version}'. Il suffit de les coder en dur dans la section ''? – metasim

+0

J'ai la version codée en dur dans les propriétés, parce que je peux la réutiliser dans les dépendances. Le chemin d'exécution ne doit pas être codé en dur, car cela dépend de la plate-forme. – Cephalopod

+0

Ceci est la manière "correcte"/approuvée typique qui évite la dépendance du système. C'est aussi * la façon typique monstrueusement compliquée (pour éviter la dépendance du système) – javadba

14

Voici une solution possible.

Créez un dossier lib dans le répertoire de votre projet et placez jfxrt.jar dans ce répertoire.

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

Et si vous voulez construire un pot exécutable, vous ne devez inclure les javafx-maven-plugin. Pour plus d'informations, voir: 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

J'utilise java.home au lieu de project.basedir, ce qui signifie que je n'ai pas besoin de mettre jfxrt.jar dans mon projet. – disrvptor

Questions connexes