2012-12-06 47 views
5

我有以下安裝在我的系統 -編譯JavaFX代碼使用Ant

Java version "1.7.0_09" 
JavaFX 2.0 SDK 
NetBeans 7.2.1 

當我試圖使用Ant編譯代碼它顯示我的錯誤信息 -

Could not load definitions from resource com/sun/javafx/tools/ant/antlib.xml. It could not be found. 

的build.xml包含

<project name="XYZ" default="XYZ" basedir="XYZ" xmlns:fx="javafx:com.sun.javafx.tools.ant"> 
    <description> 
     simple example build file 
    </description> 

    <!-- set global properties for this build --> 
    <property name="srcXYZGenerator" location="src/XYZGenerator"/> 


    <property name="classpath" location="lib/XYZLib.jar;lib/ABC.jar;lib/IJK.jar;"/> 


    <target name="init"> 
     <!-- Create the time stamp --> 
     <tstamp/> 
     <!-- Create the build directory structure used by compile --> 
     <mkdir dir="${buildXYZ}"/> 

    </target> 

    <target name="XYZ" depends="init"> 
    <!-- Compile the java code from ${src} into ${build} --> 
    <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"  
    uri="javafx:com.sun.javafx.tools.ant" classpath=".:C:\Program Files\Java\jdk1.7.0_09\lib\ant-javafx.jar"/> 
    <javac classpath="${classpath}" srcdir="${srcXYZ}" destdir="${buildXYZ}"/> 
    </target> 


</project> 

其它編譯錯誤:

[javac] C:\Users\JavaUser4\Desktop\XYX2012.12FX\XYZ\src\Utility\net\XYZ\javafx\queue\DefaultStatisticsHandlerController.java:19: error: package javafx.scene does not exist 
[javac] import javafx.scene.Node; 
[javac]     ^
[javac] C:\Users\JavaUser4\Desktop\XYZ2012.12FX\XYZ\src\Utility\net\XYZ\javafx\queue\DefaultStatisticsHandlerController.java:20: error: package javafx.scene.control does not exist 
[javac] import javafx.scene.control.Button; 
[javac]       ^
[javac] C:\Users\JavaUser4\Desktop\XYZ2012.12FX\XYZ\src\Utility\net\XYZ\javafx\queue\DefaultStatisticsHandlerController.java:21: error: package javafx.scene.control does not exist 
[javac] import javafx.scene.control.Label; 
[javac]       ^
[javac] C:\Users\JavaUser4\Desktop\XYZ2012.12FX\XYZ\src\Utility\net\XYZ\javafx\queue\DefaultStatisticsHandlerController.java:22: error: package javafx.scene.input does not exist 
[javac] import javafx.scene.input.MouseEvent; 
+0

CLASSPATH = 「:C:\ Program Files文件\ ..」 應該有:? –

+0

@AkselWillgert對不起!我沒有明白你的觀點?是的。給定的路徑是正確的。什麼:代表? –

+0

在你的buildscript中你有一些我不知道的角色。我建議你刪除。看看會發生什麼 –

回答

6

更新爲Java 8

在Oracle的Java 8,jfxrt.jar是默認的類路徑上,所以你並不需要在這個答案描述明確其添加到類路徑。添加jfxrt.jar到classpath中只需要對Java 7


的編制問題,是因爲從jre\libjfxrt.jar在classpath沒有設置。

taskdef錯誤是由於指定爲ant-javafx.jar值的路徑沒有指向文件系統上的有效文件而導致的。

我想可能還有周圍使用:而不是分隔條件路徑;和使用/,而不是\指定路徑的問題,但似乎螞蟻相當寬容那些事情,所以他們可能並不重要,在所有。

我創建了一個sample project的基礎上,你的構建腳本的一個非常微小的修改版本,爲我工作(沒有taskdef警告和沒有編譯錯誤)。它設置爲jdku9 windows 64bit。如果您使用的是不同版本的jdk,則需要適當調整腳本中的路徑。檢查哪個位的JDK版本在安裝 - 如果它是64位的,那麼你使用C:\Program Files\Java\...,如果是32位的,那麼你使用C:\Program Files (x86)\Java\...

示例項目所得到的應用程序中使用是可執行文件:

java -classpath "c:\Program Files (x86)\Java\jdk1.7.0_09\jre\lib\jfxrt.jar;XYZ\lib\ScenicView.jar;XYZ\build\XYZ" FriendFinder 

請注意,示例中的構建腳本是非常基本的,並且實際上只是作爲啓動腳本提供給您。你最好也adding ant tasks for further deployment tasks(如fx:deploy),以確保一個正確打包的應用程序,支持像點擊運行罐功能。要麼,要麼使用NetBeans,並讓它爲您生成適當的ant構建文件。

我用來建立(與ant 1.8.4)我鏈接的示例應用程序修改後的Ant腳本:

<project name="XYZ" default="XYZ" basedir="XYZ" xmlns:fx="javafx:com.sun.javafx.tools.ant">  
    <property name="srcXYZ" location="src/XYZ"/> 
    <property name="buildXYZ" location="build/XYZ"/>  
    <property name="classpath" location="C:\Program Files (x86)\Java\jdk1.7.0_09\jre\lib\jfxrt.jar;lib\ScenicView.jar"/> 

    <target name="init"> 
     <tstamp/> 
     <mkdir dir="${buildXYZ}"/> 
    </target> 

    <target name="XYZ" depends="init"> 
     <taskdef resource="com/sun/javafx/tools/ant/antlib.xml"  
    uri="javafx:com.sun.javafx.tools.ant" classpath=".:C:\Program Files (x86)\Java\jdk1.7.0_09\lib\ant-javafx.jar"/>  
     <javac includeantruntime="false" classpath="${classpath}" srcdir="${srcXYZ}" destdir="${buildXYZ}"/> 
    </target> 
</project> 
+0

非常感謝。 :) –

+0

我得到了同樣的問題,除了Java 8.然後會做什麼? – TheCoffeeCup

+0

@TheCoffeeCup我對你沒有任何建議。正如我在答覆中所述,我不希望Oracle Java 8會發生此問題,因爲jfxrt.jar位於Oracle Java 8類路徑中。 – jewelsea