2012-07-05 66 views
9

Tôi có dự án javaFX, mà tôi đang làm việc trên IDE Eclipse. Đây là dự án Maven với việc sử dụng Spring. Mục tiêu của tôi là tạo tệp jar có thể chạy (ứng dụng dekstop) từ dự án này.Cách tạo tệp jar từ dự án javaFX

Nếu tôi xuất khẩu ứng dụng của tôi để file jar như bất kỳ dự án java khác, sau đó tôi nhận này về lỗi:

C:\eclipse\projjars>java -jar EqMan.jar 
Exception in thread "main" java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: C:\eclipse\bin\glass.dll 
     at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:276) 
     at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:122) 
     at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:163) 
     at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47) 
     at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115) 
     at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.UnsatisfiedLinkError: Can't load library: C:\eclipse\bin\glass.dll 
     at java.lang.ClassLoader.loadLibrary(Unknown Source) 
     at java.lang.Runtime.load0(Unknown Source) 
     at java.lang.System.load(Unknown Source) 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:143) 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:56) 
     at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:31) 
     at com.sun.glass.ui.Application$1.run(Application.java:75) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:73) 
     at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:85) 
     at com.sun.glass.ui.win.WinApplication.<clinit>(WinApplication.java:33) 
     at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:20) 
     at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:17) 
     at com.sun.glass.ui.Application.Run(Application.java:108) 
     at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:266) 
     ... 5 more 

Nếu tôi đang cố gắng để làm cho file jar với javafxpackager, tôi nhận được một lỗi này:

C:\eclipse\workspace\equification>javafxpackager -makeall -appclass ru.igs.ava.equification.EquificationFX -name "Equification" -width 800 -height 600 
warning: [options] bootstrap class path not set in conjunction with -source 1.5 
C:\eclipse\workspace\equification\src\main\java\ru\igs\ava\equification\EqConfigureRole.java:5: error: package org.springframework.context does not exist 
import org.springframework.context.ApplicationContext; 
C:\eclipse\workspace\equification\src\test\java\ru\igs\ava\equification\AppTest.java:11: error: cannot find symbol 
    extends TestCase 
      ^
//and the same error for every class, which is added to my project as maven dependency. 

Vậy, làm cách nào để tạo tệp jar có thể chạy mà không chuyển dự án của tôi sang dự án NetBeans?

Trả lời

5

Thấy khi bạn đang sử dụng Maven cho các bản dựng của mình, bạn cũng có thể sử dụng Maven để bắt đầu bao bì JavaFX. Để thực hiện việc này, hãy sử dụng plugin Maven antrun để gọi số JavaFX ant tasks để tạo một jar cho ứng dụng của bạn bằng trình khởi chạy JavaFX được nhúng. Đây là sample maven pom để thực hiện việc này.


Lỗi của bạn khi chạy trình đóng gói javafx là do không đặt đúng đường dẫn lớp cho trình đóng gói. Một ví dụ về cách thiết lập classpath cho gói javafx để đóng gói một ứng dụng dựa vào các lib lib phụ thuộc là trong build script này.


Các lỗi liên kết không hài lòng là bởi vì bạn không bao gồm các yêu cầu của dll lib trong một thư mục ../bin tương đối so với vị trí thời gian chạy của jfxrt.jar khi bạn chạy ứng dụng của bạn. Bạn cũng có thể không đóng gói đúng ứng dụng của mình bằng trình khởi chạy JavaFX (thông qua việc thực hiện các tác vụ kiến ​​javafx được đề xuất hoặc các lệnh javafxpackager để tạo jar ứng dụng JavaFX của bạn).

Cập nhật

Đối với Maven dựa xây dựng các ứng dụng JavaFX, bây giờ bạn có thể sử dụng một Maven JavaFX plugin.

0

Đi từ sự nghi ngờ rằng vấn đề cơ bản là do sự không tương thích giữa jfxrt.jar và phiên bản Java được cài đặt làm việc cho tôi. Ứng dụng jfxrt.jar đang sử dụng tương thích với jdk-7u71, nhưng ứng dụng nằm trên máy mà JAVA_HOME được đặt thành 7.0.05. Vì vậy, tôi đã cài đặt jdk-7u71 trên máy sự cố và cập nhật JAVA_HOME.

Các vấn đề liên quan