【问题标题】:Compile JavaFX Code using ANT使用 ANT 编译 JavaFX 代码
【发布时间】:2012-11-24 09:29:28
【问题描述】:

我的系统上安装了以下 -

 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;

【问题讨论】:

  • classpath=".:C:\Program files\ .." 应该有.:?
  • @AkselWillgert 对不起!我不明白你的意思吗?是的..给定的路径是正确的。 .: 代表什么?
  • 在你的 buildscript 中有一些我不知道的字符。我建议你删除 .: 看看会发生什么
  • 删除了之前的评论并做出了解释性的回答。

标签: java ant build compilation javafx-2


【解决方案1】:

Java 8 更新

在 Oracle Java 8 中,jfxrt.jar 默认位于类路径中,因此您无需按照本答案中的说明将其显式添加到类路径中。仅 Java 7 需要将 jfxrt.jar 添加到类路径中。


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

taskdef 错误是因为指定给ant-javafx.jar 值的路径未指向您文件系统上的有效文件。

我认为在分隔路径中使用: 而不是; 以及使用/ 而不是\ 来指定路径也可能存在问题,但是ant 似乎对这些事情很宽容,所以它们可能根本不重要。

我创建了一个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)以确保正确打包的应用程序支持点击运行 jar 等功能。要么,要么使用 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>  

【讨论】:

  • 我遇到了同样的问题,除了 java 8。那该怎么办?
  • @TheCoffeeCup 我对你没有任何建议。正如我在回答中所说,我不认为 Oracle Java 8 会出现此问题,因为 jfxrt.jar 位于 Oracle Java 8 类路径上。
猜你喜欢
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多