使用ANT编译的JavaFX code [英] Compile JavaFX Code using ANT

查看:1168
本文介绍了使用ANT编译的JavaFX code的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下安装在我的系统上 -

  Java版本1.7.0_09
 的JavaFX 2.0 SDK
 7.2.1的NetBeans

当我试图编译code。使用ANT它显示我的错误信息 -

 无法加载从资源COM /阳光/ JavaFX的/工具/ ANT / antlib.xml定义。它不能被发现。

build.xml文件包含

 <项目名称=XYZ默认值=XYZBASEDIR =XYZ的xmlns:FX =JavaFX的:com.sun.javafx.tools.ant>
    <描述>
        简单的例子构建文件
    < /描述>  <! - 设置此构建全局属性 - >
    <属性名=srcXYZGenerator位置=SRC / XYZGenerator/>
    <属性名=类路径位置=LIB / XYZLib.jar; LIB / ABC.jar; LIB / IJK.jar;/>
    <目标名称=初始化>
        <! - 创建时间戳 - >
        < TSTAMP />
        <! - 创建由编译使用的生成目录结构 - >
        < MKDIR DIR =$ {} buildXYZ/>    < /目标与GT;    <目标名称=XYZ取决于=初始化>
    <! - 从$ {src}字符串为$ {}构建编译java code - >
    <的taskdef资源=COM /阳光/ JavaFX的/工具/ ANT / antlib.xml
    URI =JavaFX的:com.sun.javafx.tools.antCLASSPATH =:C:\\ Program Files文件\\的Java \\ jdk1.7.0_09 \\ lib目录\\蚂蚁javafx.jar/>
    < javac的CLASSPATH =$ {}类路径SRCDIR =$ {} srcXYZDESTDIR =$ {} buildXYZ/>
    < /目标与GT;
< /项目>

其他的编译错误:

  [javac的] C:\\Users\\JavaUser4\\Desktop\\XYX2012.12FX\\XYZ\\src\\Utility\
et\\XYZ\\javafx\\queue\\DefaultStatisticsHandlerController.java:19:错误:包javafx.scene不存在
[javac的]进口javafx.scene.Node;
[javac的] ^
[javac的] C:\\Users\\JavaUser4\\Desktop\\XYZ2012.12FX\\XYZ\\src\\Utility\
et\\XYZ\\javafx\\queue\\DefaultStatisticsHandlerController.java:20:错误:包javafx.scene.control不存在
[javac的]进口javafx.scene.control.Button;
[javac的] ^
[javac的] C:\\Users\\JavaUser4\\Desktop\\XYZ2012.12FX\\XYZ\\src\\Utility\
et\\XYZ\\javafx\\queue\\DefaultStatisticsHandlerController.java:21:错误:包javafx.scene.control不存在
[javac的]进口javafx.scene.control.Label;
[javac的] ^
[javac的] C:\\Users\\JavaUser4\\Desktop\\XYZ2012.12FX\\XYZ\\src\\Utility\
et\\XYZ\\javafx\\queue\\DefaultStatisticsHandlerController.java:22:错误:包javafx.scene.input不存在
[javac的]进口javafx.scene.input.MouseEvent;


解决方案

更新的Java 8

在甲骨文的Java 8, jfxrt.jar 默认情况下在类路径上,所以你并不需要在此说明,明确其添加到类路径回答。添加 jfxrt.jar 到classpath中,只需要对Java 7。


编制问题,是因为 jfxrt.jar 的jre \\ lib中并没有在classpath中设置。

该错误的taskdef是因为路径指定蚂蚁javafx.jar 值不指向一个有效文件,在文件系统造成的。

我想可能还有各地使用问题的而非; 在分隔条件路径和使用 / ,而不是 \\ 来指定路径,但蚂蚁似乎pretty宽容那些事情,所以他们可能不要T在所有问题。

我创建基于一个非常略加修改版本的样本项目的构建脚本为我工作(没有的taskdef警告,没有编译错误)。它设置了jdku9窗口64位。如果您使用的是不同版本的JDK,则需要在脚本适当调整路径。检查哪个位的JDK版本在安装 - 如果它是64位的,那么你使用 C:\\ Program Files文件\\的Java \\ ... ,如果是32位,则您使用 C:\\ Program Files文件(x86)的\\的Java \\ ...

示例项目所得到的应用程序是使用执行

 的java -classpathC:\\ Program Files文件(x86)的\\的Java \\ jdk1.7.0_09 \\ JRE \\ lib目录\\ jfxrt.jar; XYZ \\ lib目录\\ ScenicView.jar; XYZ \\建立\\ XYZ交友

请注意,该样品在构建脚本是很基本的,其实只是提供作为首发脚本,让你去。你是最好的关闭也将进一步部署任务 Ant任务(像 FX:部署),以确保正确的打包应用程序支持像一个点击即可运行罐子功能。如果不是这样,或者使用NetBeans,让它产生合适的Ant构建文件给你。

修改后的Ant脚本我用来建立(与蚂蚁1.8.4 )示例应用程序我挂的是:

 <项目名称=XYZ默认值=XYZBASEDIR =XYZ的xmlns:FX =JavaFX的:com.sun.javafx.tools.ant>
    <属性名=srcXYZ位置=SRC / XYZ/>
    <属性名=buildXYZ位置=构建/ XYZ/>
    <属性名=类路径位置=C:\\ Program Files文件(x86)的\\的Java \\ jdk1.7.0_09 \\ JRE \\ lib目录\\ jfxrt.jar; LIB \\ ScenicView.jar/>    <目标名称=初始化>
        < TSTAMP />
        < MKDIR DIR =$ {} buildXYZ/>
    < /目标与GT;    <目标名称=XYZ取决于=初始化>
        <的taskdef资源=COM /阳光/ JavaFX的/工具/ ANT / antlib.xml
    URI =JavaFX的:com.sun.javafx.tools.antCLASSPATH =:C:\\ Program Files文件(x86)的\\的Java \\ jdk1.7.0_09 \\ lib目录\\蚂蚁javafx.jar/>
        < javac的includeantruntime =假的classpath =$ {}类路径SRCDIR =$ {} srcXYZDESTDIR =$ {} buildXYZ/>
    < /目标与GT;
< /项目>

I have following installed on my system -

 Java version "1.7.0_09"
 JavaFX 2.0 SDK 
 NetBeans 7.2.1

When I am trying to compile the code using ANT it showing me error message -

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

Build.XML contains

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

Other Compilation Errors:

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

解决方案

Update for Java 8

In Oracle Java 8, jfxrt.jar is on the class path by default, so you don't need to explicitly add it to the class path as described in this answer. Adding jfxrt.jar to the classpath is only necessary for Java 7.


The compilation problem was because jfxrt.jar from jre\lib was not set in the classpath.

The taskdef error was caused because the path specified to ant-javafx.jar value does not point to a valid file on your filesystem.

I thought there might also be issues around using a : rather than a ; in seperating paths and in using / rather than \ to specify paths, but ant seems pretty forgiving about those things, so they likely don't matter at all.

I created a sample project based on a very slightly modified version of your build script which worked for me (no taskdef warning and no compilation errors). It is set up for jdku9 windows 64bit. If you are using a different version of the jdk, you will need to adjust the paths in the script appropriately. Check which bit version of the jdk you have installed - if it is 64 bit then you use C:\Program Files\Java\..., if it is 32 bit then you use C:\Program Files (x86)\Java\...

The resultant application for the sample project is executable using:

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

Note that the build script in the sample is very basic and is really just provided as a starter script to get you going. You are best off also adding ant tasks for further deployment tasks (like fx:deploy) to ensure a properly packaged application which supports features like a click-to-run jar. Either that, or use NetBeans and let it generate appropriate ant build files for you.

The modified ant script I used to build (with ant 1.8.4) the sample application I linked is:

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

这篇关于使用ANT编译的JavaFX code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆