2012-02-15 3 views
23

Можно ли ссылаться на JavaFX 2.0 как зависимость в Maven в pom.xml, чтобы все работало плавно?JavaFX 2 как зависимость от Maven

я видел в this question, что можно установить jfxrt.jar локально, но в идеале я хотел бы более простой подход, при котором зависимость может быть правильно решена и загружаемым без каких-либо местных писак ....

ответ

12

Нет, такого решения на данный момент не существует. Я сомневаюсь, что это будет когда-либо, так как с версии 1.7 1.7 обновления JavaFX устанавливается вместе с JVM. Планы включают JavaFX в JRE, начиная с Java 1.8 (в следующем году). С этого момента вам совсем не нужна зависимость.

Однако вы можете использовать Maven с JavaFX уже сейчас, потому что Maven может вызывать задачи Ant (antrun plugin), и есть задачи Ant Ant, доступные с дистрибутивом JavaFX. Об этом я писал, но это на французском языке: Creer un projet Maven pour JavaFX2. Он проводит вас через весь процесс. Тем не менее, если вы не понимаете французский, оставьте комментарий к этой статье, и я постараюсь вам помочь или зайдите в the Oracle forum

+0

Добавление к этому уже хороший ответ, я просто хотел бы указать на пост Адама Biên в: http://www.adam-bien.com/roller/abien/entry/how_to_compile_java_fx –

6

Статья Сергея предлагает добавить javafx как системную зависимость, которая не должна быть используемый. Вместо этого вы можете включить следующее в свой POM для автоматической установки javafx.

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

Если вы хотите иметь установленный API Docs, заархивировать содержимое папки Docs/апи к Docs/api.zip. Теперь вам просто нужно запустить maven, с активированным профилем и заданными свойствами jfx-runtime и jfx-version.

+0

Первый Я видел это решение и убедился, что это правильный способ сделать это. Желание этого было наиболее защищенным способом. Как вы предлагаете нам обрабатывать '$ {jfx-runtime}' и '$ {jfx-version}'. Просто скопируйте их в разделе ''? – metasim

+0

У меня есть версия, жестко закодированная в свойствах, потому что тогда я могу повторно использовать ее в зависимостях. Путь выполнения не должен быть жестко закодирован, потому что он зависит от платформы. – Cephalopod

+0

Это типичный «правильный»/одобренный способ, который позволяет избежать зависания системы. Это также * типичный чудовищно сложный способ (во избежание зависания системы) – javadba

14

это возможное решение.

Создайте папку lib в каталоге проекта и поместите jfxrt.jar в этот каталог.

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

И если вы хотите построить исполняемый банку нужно только включить javafx-maven-plugin. Для получения дополнительной информации см: 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

Я использую java.home вместо project.basedir, что означает, что мне не нужно помещать jfxrt.jar в свой проект. – disrvptor

Смежные вопросы