2012-02-15 40 views
23

Có thể tham chiếu JavaFX 2.0 dưới dạng phụ thuộc trong Maven trong tệp pom.xml để mọi thứ hoạt động trơn tru không?JavaFX 2 là phụ thuộc Maven

tôi thấy trong this question rằng nó có thể cài đặt các jfxrt.jar tại địa phương, nhưng lý tưởng tôi muốn một phương pháp đơn giản mà phụ thuộc có thể được giải quyết đúng và tải về mà không cần bất kỳ hacks địa phương ....

Trả lời

12

Không, giải pháp như vậy không tồn tại trong thời điểm này. Tôi nghi ngờ rằng nó sẽ bao giờ, kể từ khi từ bản cập nhật Java 1.7 2, JavaFX được cài đặt cùng với JVM. Các kế hoạch bao gồm JavaFX trong JRE như từ Java 1.8 (năm tới). Từ đó trở đi, bạn sẽ không cần sự phụ thuộc chút nào.

Tuy nhiên bạn có thể sử dụng Maven với JavaFX ngay bây giờ, vì Maven có thể gọi nhiệm vụ Ant (antrun plugin) và có các tác vụ Ant siêu có sẵn với bản phân phối JavaFX. Tôi viết blog về nó, nhưng nó bằng tiếng Pháp: Creer un projet Maven pour JavaFX2. Nó hướng dẫn bạn qua toàn bộ quá trình. Tuy nhiên, nếu bạn không hiểu tiếng Pháp, hãy để lại nhận xét về bài viết và tôi sẽ cố gắng giúp bạn hoặc xem tại đây trong the Oracle forum

+0

Thêm vào trả lời đã tốt này, tôi chỉ muốn trỏ đến bài Adam Biên: http://www.adam-bien.com/roller/abien/entry/how_to_compile_java_fx –

6

Bài viết của Sergey đề xuất thêm javafx làm phụ thuộc hệ thống, không nên đã sử dụng. Thay vào đó, bạn có thể bao gồm những điều sau đây trong POM của bạn để cài đặt javafx tự động.

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

Nếu bạn muốn cài đặt tài liệu api, hãy nén nội dung của thư mục tài liệu/api vào docs/api.zip. Bây giờ bạn chỉ cần chạy maven, với cấu hình được kích hoạt và thuộc tính jfx-runtime và jfx-version được thiết lập.

+0

Đầu tiên thời gian tôi đã nhìn thấy giải pháp này, và thuyết phục đây là cách đúng đắn để làm điều đó. Muốn đây là cách ủng hộ nhất. Bạn đề nghị chúng ta xử lý '$ {jfx-runtime}' và '$ {jfx-version}' như thế nào. Chỉ cần mã hóa chúng trong phần ' '? – metasim

+0

Tôi có phiên bản mã hóa cứng trong các thuộc tính, bởi vì sau đó tôi có thể tái sử dụng nó trong các phụ thuộc. Đường dẫn thời gian chạy không nên được mã hóa cứng, bởi vì nó phụ thuộc vào nền tảng. – Cephalopod

+0

Đây là cách "chuẩn"/phê duyệt điển hình tránh được sự phụ thuộc của hệ thống. Đó là * cũng * cách phức tạp đơn giản đặc biệt (để tránh sự phụ thuộc hệ thống) – javadba

14

đây là giải pháp khả thi.

Tạo một thư mục lib trong thư mục dự án của bạn và đặt jfxrt.jar vào thư mục đó.

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

Và nếu bạn muốn tạo một chai thực thi, bạn chỉ cần bao gồm javafx-maven-plugin. Để biết thêm thông tin xem: 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

Tôi sử dụng java.home thay vì project.basedir, có nghĩa là tôi không cần phải đặt jfxrt.jar vào dự án của mình. – disrvptor