第一个Ant build.xml文件未编译为检测错误和其他ant问题

时间:2012-12-19 16:26:46

标签: ant

我正在尝试为刚刚从Netbeans移动的已建立的Java项目编写我的第一个build.xml文件。

一个。我想要达到的目标非常简单:

  1. 使用下面的“dest”目标,将所有源文件(1个包中的4个)复制到我想要创建的src / test。源文件被复制到“src / test”目录,但是“src / test”目录中也创建了“test”目录,为什么我不确定。

  2. 使用下面的“jar”目标,创建一个包含包名称目录下所有类文件的jar - 完全没有工作!

  3. 使用“compile”目标确保所有代码都已成功编译但我遇到了很多错误。代码在Eclipse中成功完成了CLEAN和BUILD,所以我不确定我在ANT脚本中做错了什么,我注意到的一件事是当它只有“4”时它试图编译“8”文件。不确定其他4个来自哪里虽然它表示重复。关于丢失符号的错误显示似乎是指有关构建路径中包含的必需项目的import语句,因此我不确定如何解决ANT在编译时引发的问题。

  4. B中。这是我第一次尝试创建我的第一个build.xml文件,但我遇到了下面显示的问题:

    <project name="ThalesDataGenerator" basedir="." default="clean-build">
    
        <property name="src.dir"     value="src"/>
        <property name="dest.dir"    value="${src.dir}/test"/>
    
        <property name="dist.dir"    value="dist"/>
    
        <property name="build.dir"   value="build"/>
        <property name="classes.dir" value="${build.dir}/classes"/>
        <property name="jar.dir"     value="${build.dir}/${ant.project.name}"/>
    
        <property name="main-class"  value="thalesdatagenerator.ThalesDataGenerator"/>
    
        <target name="clean">
            <delete dir="${build.dir}"/>
            <delete dir="${dest.dir}"/>
        </target>
    
        <target name="compile">
            <mkdir dir="${classes.dir}"/>
            <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
        </target>
    
        <target name="dest">
            <mkdir dir="${dest.dir}"/>
            <copy todir="${dest.dir}">  
                <fileset dir="${src.dir}" includes="**"/>  
            </copy>
        </target>
    
        <target name="jar" depends="compile">
            <mkdir dir="${jar.dir}"/>
            <jar destfile="${jar.dir}/ThalesDataGenerator.jar" basedir="${build.dir}">
                <manifest>
                    <attribute name="Main-Class" value="${main-class}"/>
                </manifest>
            </jar>
        </target>       
    
        <target name="run" depends="jar">
            <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
        </target>
    
        <target name="clean-build" depends="clean,dest,jar,run"/>
    
    </project>
    

    以下是我遇到的错误:

    • &GT; Buildfile:C:\ ATMSwitch \ ThalesDataGenerator \ build.xml clean:
    • &GT; [删除]删除目录C:\ ATMSwitch \ ThalesDataGenerator \ build
    • &GT; DEST:
    • &GT; [mkdir]创建目录:C:\ ATMSwitch \ ThalesDataGenerator \ src \ test
    • &GT; [copy]将4个文件复制到C:\ ATMSwitch \ ThalesDataGenerator \ src \ test
    • &GT; [copy]将2个空目录复制到C:\ ATMSwitch \ ThalesDataGenerator \ src \ test下的1个空目录
    • &GT;编译:
    • &GT; [mkdir]创建目录:C:\ ATMSwitch \ ThalesDataGenerator \ build \ classes
    • &GT; [javac] C:\ ATMSwitch \ ThalesDataGenerator \ build.xml:22:警告:'includeantruntime'未设置,默认为 build.sysclasspath =最后;对于可重复的构建,设置为false
    • &GT; [javac]将8个源文件编译为C:\ ATMSwitch \ ThalesDataGenerator \ build \ classes
    • &GT; [javac] C:\ ATMSwitch \ ThalesDataGenerator \ src \ thalesdatagenerator \ ISOUtil.java:36: 重复的类:thalesdatagenerator.ISOUtil
    • &GT; [javac] C:\ ATMSwitch \ ThalesDataGenerator \ src \ test \ thalesdatagenerator \ ThalesDataGenerator.java:13: package common.database不存在
    • &GT; [javac] import common.database.Database;
    • &GT; [javac] ^
    • &GT; [javac] C:\ ATMSwitch \ ThalesDataGenerator \ src \ test \ thalesdatagenerator \ ThalesSystem.java:13: 包com.sharpbancsystems.atmterminals.thales不存在
    • &GT; [javac]注意:C:\ ATMSwitch \ ThalesDataGenerator \ src \ test \ thalesdatagenerator \ ThalesDataGenerator.java 使用未经检查或不安全的操作。
    • &GT; [javac]注意:使用-Xlint重新编译:取消选中以获取详细信息。
    •   

      [javac] 18个错误

    •   

      建立失败

    •   

      C:\ ATMSwitch \ ThalesDataGenerator \ build.xml:22:编译失败;有关详细信息,请参阅编译器错误输出。

    •   

      总时间:874毫秒

    非常感谢任何帮助/方向。问候。

2 个答案:

答案 0 :(得分:1)

让我们一次拿一个:

一些提示:

  • 定义属性时使用${basedir}。例如,<property name="src.dir" value="${basedir}/src"/>而不仅仅是value="src"/>
  • 请勿强制将清洁作为默认目标的一部分。标准的默认目标应该构建jar,就是这样。干净利落会使您重复可能不需要的工作。您可以使用名为all的目标来清理,构建和执行。
  • 如上所述,使用默认目标名称clean来清理构建,使用all来运行构建中的所有目标。这些都不应该是默认目标。

现在回到你的问题。您的<javac>目标如下所示:

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>

你是说你的消息来源没有第三方罐子吗?您需要创建一个包含源所依赖的所有第三方jar的编译类路径。在Eclipse中,有一个内置的类路径,你正在使用它。在Ant中,您必须指定它。

让我们假设您编译源所需的所有jar都存储在${basedir}/lib中。您的编译目标需要如下所示:

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <path id="compile.classpath">
        <fileset dir="${basedir}/lib">
           <include name="**/*.jar"/>
        </fileset>
    </path>
    <javac srcdir="${src.dir}" 
        classpathref="compile.classpath"
        destdir="${classes.dir}"/>
</target>

有很多方法可以做到这一点,但这是最简单的语法。我使用<path>来定义包含我需要的所有jar的 compile.claasspath 。由于它们都位于lib目录中,因此非常简单。

接下来,我在编译Java代码时使用 classpathref 参数指定此类路径。

这将获得编译的类(现在没有发生)。由于 compile 目标失败,因此Ant构建在调用<jar>任务之前结束。使编译工作应该允许您的构建的其余部分工作。

答案 1 :(得分:0)

发生在我身上。是因为我没有将selenium-server-standalone-3.4.0.jar复制到我的C:\ jars目录(ws.jars)