0

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

A. 我试图实现的目标非常简单:

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

  2. 使用下面的“jar”目标,创建一个 jar,其中包含包名目录下的所有类文件 - 根本不起作用!

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

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>

这是我得到的错误:

  • > 构建文件:C:\ATMSwitch\ThalesDataGenerator\build.xml 干净:
  • > [delete] 删除目录C:\ATMSwitch\ThalesDataGenerator\build
  • > 目的地:
  • > [mkdir] 创建的目录:C:\ATMSwitch\ThalesDataGenerator\src\test
  • > 【复制】复制4个文件到C:\ATMSwitch\ThalesDataGenerator\src\test
  • > 【复制】复制2个空目录到C:\ATMSwitch\ThalesDataGenerator\src\test下1个空目录
  • > 编译:
  • > [mkdir] 创建的目录:C:\ATMSwitch\ThalesDataGenerator\build\classes
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\build.xml:22: 警告:'includeantruntime' 未设置,默认为 build.sysclasspath=last;为可重复构建设置为 false
  • > [javac] 编译8个源文件到C:\ATMSwitch\ThalesDataGenerator\build\classes
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\thalesdatagenerator\ISOUtil.java:36:重复类:thalesdatagenerator.ISOUtil
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesDataGenerator.java:13: 包 common.database 不存在
  • > [javac] 导入 common.database.Database;
  • > [javac] ^
  • > [javac] C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesSystem.java:13: com.sharpbancsystems.atmterminals.thales 包不存在
  • > [javac] 注意:C:\ATMSwitch\ThalesDataGenerator\src\test\thalesdatagenerator\ThalesDataGenerator.java 使用未经检查或不安全的操作。
  • > [javac] 注意:使用 -Xlint 重新编译:未选中详细信息。
  • [javac] 18 个错误

  • 构建失败

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

  • 总时间:874 毫秒

任何帮助/方向将不胜感激。问候。

4

2 回答 2

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 吗?您需要创建一个编译类路径,其中包含您的源所依赖的所有第三方 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参数来指定这个类路径。

这将编译类(现在没有发生)。由于编译<jar>目标失败,Ant 构建在任务被调用之前就结束了。让编译工作应该允许你构建的其余部分工作。

于 2012-12-19T17:28:39.167 回答
0

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

于 2017-07-27T01:32:59.607 回答