使用ANT编译JavaFX代码

使用ANT编译JavaFX代码,java,ant,build,compilation,javafx-2,Java,Ant,Build,Compilation,Javafx 2,我的系统上安装了以下内容- 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. XML包含 <project name="XYZ" default="XYZ" based

我的系统上安装了以下内容-

 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. 
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>  
Java8的更新

在OracleJava8中,默认情况下,
jfxrt.jar
位于类路径上,因此您不需要按照本答案中所述将其显式添加到类路径中。只有Java7才需要向类路径添加
jfxrt.jar


编译问题是因为类路径中没有设置来自
jre\lib
jfxrt.jar

导致taskdef错误的原因是指定给
ant javafx.jar
值的路径未指向文件系统上的有效文件

我认为使用
而不是
,也可能会有问题在分开的路径中,使用
/
而不是
\
来指定路径,但是ant似乎非常宽容这些事情,所以它们可能根本不重要

我创建了一个基于构建脚本的非常轻微的修改版本,该版本对我有效(没有taskdef警告,也没有编译错误)。它是为jdku9 windows 64位设置的。如果您使用的是不同版本的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
请注意,示例中的构建脚本非常基本,实际上只是作为入门脚本提供的,以帮助您继续。您最好也(比如
fx:deploy
)来确保一个正确打包的应用程序,它支持点击运行jar之类的功能。或者使用NetBeans,让它为您生成适当的ant构建文件

我用来构建(使用)我链接的示例应用程序的修改后的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>  


classpath=“:C:\Program files\..”应该有吗?@AkselWillgert对不起!我不明白你的意思?对给定的路径是正确的。什么。:代表什么?在你的构建脚本中,你有一些我不认识的角色。我建议您删除。:并查看发生了什么删除了之前的注释并给出了解释性的答案。我遇到了相同的问题,除了java 8。“那怎么办呢?”警察说,“我没有什么建议给你。”。正如我在回答中所说的,我不希望Oracle Java 8出现这个问题,因为jfxrt.jar位于Oracle Java 8类路径上。
<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>