【问题标题】:Ant build failed: "Target "build..xml" does not exist"Ant 构建失败:“目标“build..xml”不存在”
【发布时间】:2010-11-08 08:34:58
【问题描述】:

当我以详细模式运行 ant 文件时,出现如下错误。有谁知道出了什么问题?我是新手

antlib:org.apache.tools.ant] Could not load definitions from resource org/apach
e/tools/ant/antlib.xml. It could not be found.
Override ignored for property "java.home"
BUILD FAILED
Target "build.xml" does not exist in the project "MYPROJECT".
        at org.apache.tools.ant.Project.tsort(Project.java:1821)
        at org.apache.tools.ant.Project..topoSort(Project.java:1729)
        at org.apache.tools.ant.Project.topoSort(Project.java:1692)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
        at org.apache.tools.ant.Main.runBuild(Main.java:698)
        at org.apache.tools.ant.Main.startAnt(Main.java:199)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Total time: 1 second

这是我的build.xml

<project name="MYPROJECT" default="dev" basedir=".">
  <property name="build.home" value="build/jsp" />
  <property name="tomcat.home" location="../Tomcat 5.0/" />
  <path id="project.class.path">
    <fileset dir="./lib/">
      <include name="**/*.jar" />
    </fileset>
  </path>
  <target name="reltag">
    <tstamp>
      <format property="now" pattern="d MMM yyyy HH:mm" />
    </tstamp>
    <property name="reltag" value="Built date: ${now}" />
  </target>
  <target name="dev" depends="compile" description="Builds for development">
    <mkdir dir="jsp/WEB-INF/lib" />
    <mkdir dir="jsp/WEB-INF/classes" />
    <copy todir="jsp/WEB-INF/lib">
      <fileset dir="lib">
        <exclude name="**/CVS/*" />
      </fileset>
    </copy>
    <copy todir="jsp/WEB-INF/classes">
      <fileset dir="classes">
        <exclude name="**/CVS/*" />
      </fileset>
    </copy>
  </target>
  <target name="compile" depends="myproject-gen,reltag">
    <copy file="setup/Version.java.template" tofile="java/myproject/Version.java" overwrite="true">
      <filterset>
        <filter token="VERSION" value="${reltag}" />
      </filterset>
    </copy>
    <mkdir dir="classes" />
    <depend srcdir="java" destdir="classes" cache="depcache" />
    <javac srcdir="java" destdir="classes">
      <classpath refid="project.class.path" />
    </javac>
  </target>
  <target name="myproject-gen" description="Generates torque classes and SQL for myproject">
    <!-- generate the java files -->
    <ant dir="torque" target="om" />
    <antcall target="myproject-sql-mysql" />
  </target>
  <!-- generate the schema.sql script for MySQL -->
  <target name="myproject-sql-mysql" depends="myproject-sql-mysql-check" unless="mysql.schema.up.to.date">
    <echo message="Generating SQL file for MySQL" />
    <ant dir="torque" target="sql">
      <property name="torque.database" value="mysql" />
      <property name="torque.runOnlyOnSchemaChange" value="false" />
    </ant>
    <move file="sql/gen/myproject-schema.sql" tofile="sql/gen/myproject-schema-mysql.sql" overwrite="true" />
    <copy file="sql/gen/myproject-schema-mysql.sql" tofile="jsp/admin/database.sql" overwrite="true" />
    <copy file="sql/init.sql" tofile="jsp/admin/init.sql" overwrite="true" />
  </target>
  <!-- check if we need to generate the sql file -->
  <target name="myproject-sql-mysql-check">
    <uptodate property="mysql.schema.up.to.date" targetfile="sql/gen/myproject-schema-mysql.sql" srcfile="torque/myproject-schema.xml" />
  </target>
  <target name="myproject-war" depends="compile-jsp">
    <mkdir dir="build" />
    <jar destfile="build/myproject.war" basedir="build/jsp" />
  </target>
  <target name="prepare_for_war_file">
    <mkdir dir="build\jsp-classes\org\apache\jsp" />
    <!-- <move todir="${build.home}/WEB-INF/classes/org/apache/jsp"> <fileset dir="${build.home}"> <include name="*.jsp"/> </fileset> </move> -->
    <!-- copy everything which is not a jsp to admin directory -->
    <copy tofile="${build.home}/admin/database.sql">
      <fileset file="sql/gen/*-schema-mysql.sql" />
    </copy>
    <copy file="sql/init.sql" todir="${build.home}/admin" />
    <mkdir dir="${build.home}/pdb_files" />
    <!-- copy images directory -->
    <copy todir="${build.home}/images">
      <fileset dir="jsp/images" />
    </copy>
    <copy todir="${build.home}/hand">
      <fileset dir="jsp/hand" />
    </copy>
    <!-- copy javascript directory -->
    <copy todir="${build.home}/javascript">
      <fileset dir="jsp/javascript" />
    </copy>
    <!-- copy META-INF directory -->
    <copy todir="${build.home}/META-INF">
      <fileset dir="jsp/META-INF" />
    </copy>
    <!-- copy stylesheet directory -->
    <copy todir="${build.home}/stylesheet">
      <fileset dir="jsp/stylesheet" />
    </copy>
    <!-- copy WEB-INF directory -->
    <copy todir="${build.home}/WEB-INF/classes/">
      <fileset dir="classes/" includes="**" />
    </copy>
    <copy todir="${build.home}/WEB-INF/lib">
      <fileset dir="lib" includes="*.*" excludes="Cabwiz" />
    </copy>
    <!-- copy license and properties -->
    <!--<copy file="WebContent/myproject.license" todir="${build.home}"/> -->
    <copy file="jsp/myproject.properties" todir="${build.home}" />
    <!-- move jsp classes to the correct package structure so war file will work when deployed -->
    <move todir="${build.home}/WEB-INF/classes/org/apache/jsp">
      <fileset dir="${build.home}" includes="**/*.class" excludes="WEB-INF/**" />
    </move>
    <antcall target="create-web_XML"></antcall>
  </target>
  <target name="create-web_XML">
    <loadfile property="generated.web.xml" srcFile="jsp/WEB-INF/generated_web.xml" />
    <copy file="jsp/WEB-INF/web_template.xml" tofile="jsp/WEB-INF/web.xml.deployable" overwrite="true">
      <filterset begintoken="&lt;!--" endToken="--&gt;">
        <filter token="GENERATED_WEB_XML" value="${generated.web.xml}" />
      </filterset>
    </copy>
    <copy file="jsp/WEB-INF/web.xml.deployable" tofile="build/jsp/WEB-INF/web.xml" />
  </target>
  <target name="compile-jsp" depends="dev">
    <antcall target="prepare_for_war_file"></antcall>
    <property environment="env" />
    <taskdef classname="org.apache.jasper.JspC" name="jasper2">
      <classpath id="jspc.classpath">
        <pathelement location="${java.home}/../lib/tools.jar" />
        <fileset dir="${env.tomcat.home}/bin2">
          <include name="*.jar" />
        </fileset>
        <fileset dir="${env.tomcat.home}/server/lib">
          <include name="*.jar" />
        </fileset>
        <fileset dir="${env.tomcat.home}/common/lib">
          <include name="*.jar" />
        </fileset>
      </classpath>
    </taskdef>
    <mkdir dir="java/jsp-src" />
    <jasper2 validateXml="false" package="org.apache.jsp" uriroot="jsp" webXmlFragment="jsp/WEB-INF/generated_web.xml" outputDir="java/jsp-src" />
    <jspc srcdir="jsp" destdir="java/jsp-src">
      <include name="include/**/*.jsp" />
      <include name="**/*.jsp" />
    </jspc>
    <mkdir dir="build/jsp-classes" />
    <property environment="env" />
    <javac destdir="build/jsp/WEB-INF/classes" optimize="off" debug="on" failonerror="true" srcdir="java/jsp-src" excludes="**/*.smap">
      <classpath>
        <pathelement location="classes" />
        <fileset dir="lib">
          <include name="*.jar" />
        </fileset>
        <pathelement location="${env.tomcat.home}/common/classes" />
        <fileset dir="${env.tomcat.home}/common/lib">
          <include name="*.jar" />
        </fileset>
        <pathelement location="${env.tomcat.home}/shared/classes" />
        <fileset dir="${env.tomcat.home}/shared/lib">
          <include name="*.jar" />
        </fileset>
        <fileset dir="${env.tomcat.home}/bin">
          <include name="*.jar" />
        </fileset>
      </classpath>
      <include name="**" />
      <!--<exclude name="**/includes/*menu_jsp.java" /> -->
    </javac>
  </target>
  <target name="clean" description="Deletes the java/classes dir and torque base objects">
    <delete dir="classes" />
    <delete dir="${build.home}" />
    <delete>
      <fileset file="build/*" />
    </delete>
    <delete dir="java/myproject/torque/map" />
    <delete dir="java/jsp-src" />
    <delete dir="jsp/WEB-INF/classes" />
    <delete dir="jsp/WEB-INF/lib" />
    <delete>
      <fileset dir="java/myproject/torque" includes="Base*.java" />
    </delete>
    <touch file="torque/myproject-schema.xml" />
  </target>
</project>

【问题讨论】:

    标签: java ant build


    【解决方案1】:

    因为你的 ant 文件的名字是 build.xml,你应该只输入 ant 而不用 ant build.xml。 即:&gt; ant[回车]

    【讨论】:

      【解决方案2】:
      1. 可能您没有正确设置环境变量 ANT_HOME
      2. 看来您是这样调用 Ant 的:“ant build..xml”。如果您的 ant 脚本名称为 build.xml,您只需在命令行中指定一个目标。例如:“ant target1”。

      【讨论】:

      • 我在环境变量中设置了 ant_home,并像 ant -verbose build.xml 一样调用了 ant。我遇到了同样的错误。
      • 您不必提供脚本的名称。将其称为“ant -verbose”并在此处显示输出。
      • 好的,很抱歉我给了 build.xml。我将尝试使用目标 now.thanx :)
      • 但是当我给 ant 详细的时候。我得到了 BUILD FAILED Target "verbose" does not exist in the project "MYPROJECT"
      • 你错过了破折号。像这样调用:ant -verbose
      【解决方案3】:

      看起来您将其称为“ant build..xml”。 ant 会自动选择当前目录下的 build.xml 文件,因此调用 'ant'(如果定义了 default-target)或 'ant target'(将调用名为 target 的目标)就足够了。

      通过调用“ant -p”,您将获得在 build.xml 中定义的目标列表。

      编辑:在评论中显示了调用“ant -verbose build.xml”。正确地说,这必须称为“ant -verbose”。当前目录下的 build.xml 文件将被自动使用。如果需要显式指定构建文件(例如,因为它的名称不是 build.xml),则必须使用“-f”选项指定构建文件:“ant -verbose -f build.xml”。我希望这会有所帮助。

      【讨论】:

      • 我称之为“ant -verbose build.xml”。
      • 我认为 ant -p 只显示定义了描述的目标。
      • @braveterry:没错,-p 只显示具有定义描述的目标。通常,这用于使目标“公开”而其他目标为私有。作为构建文件的创建者,您经常需要内部使用的目标,但用户不需要知道它们。如果你是古玩:'ant -p -v' 显示所有目标,也包括这些没有描述的目标。
      【解决方案4】:

      在 build.xml 所在的文件夹中仅运行命令 -

      蚂蚁

      而不是命令 - `

      ant build.xml

      `

      。如果您使用 ant 文件作为构建 xml,那么以下步骤对您有帮助 步骤: 打开cmd提示>>切换到项目位置>>输入ant点击回车键

      【讨论】:

        【解决方案5】:

        这是在您运行ant -dant -verbose 时出现的问题,但在其他时间运行?

        我注意到这条错误消息行:

        无法从资源 org/apache/tools/ant/antlib.xml 加载定义。找不到。

        org/apache/tools/ant/antlib.xml 文件 嵌入在ant.jar 中。 ant 命令实际上是一个名为ant 的shell 脚本或一个名为ant.bat 的批处理脚本。如果没有设置环境变量 ANT_HOME,它会通过查看ant 命令本身的位置来确定它的位置。

        有时我看到有人将ant shell/batch 脚本移动到他们的路径中,并且没有设置 ANT_HOME,或者设置不正确。

        你在哪个平台上?这是 Windows 还是 Unix/Linux/MacOS?如果您使用的是 Windows,请检查是否设置了 %ANT_HOME%。如果是,请确保它是正确的目录。确保您已将 PATH 设置为包含 %ANT_HOME%/bin

        如果您使用的是 Unix,请不要将 ant shell 脚本复制到可执行目录。相反,建立一个符号链接。我有一个名为/usr/local/bin 的目录,我在其中放置了我想要覆盖/bin/usr/bin 中的命令的命令。我的 Ant 安装在 /opt/ant-1.9.2 中,我有一个从 /opt/ant-1.9.2/opt/ant 的符号链接。然后,我有从/opt/ant/bin/usr/local/bin 的所有命令的符号链接。 Ant shell 脚本可以检测符号链接并找到正确的 Ant HOME 位置。

        接下来,转到您的 Ant 安装目录并在 lib 目录下查看以确保 ant.jar 在那里,并且它包含 org/apache/tools/ant/antlib.xml。您可以使用jar tvf ant.jar 命令。我唯一可以强调的是,您确实已正确设置了所有内容。你的 PATH 中有你的 Ant shell 脚本,或者因为你在你的类路径中包含了你的 Ant HOME 目录的 bin 目录,或者(如果你在 Unix/Linux/MacOS 上),你有这个文件符号链接到你的目录路径。

        确保您的 JAVA_HOME 设置正确(在 Unix 上,您可以使用符号链接技巧让 java 命令为您设置它),并且您使用的是 Java 1.5 或更高版本。 Java 1.4 将不再适用于较新版本的 Ant。

        同时运行ant -version 看看你会得到什么。您可能会遇到与以前相同的错误,这导致我认为您有问题。

        让我知道你发现了什么以及你的操作系统,我可以指导你重新安装 Ant。

        【讨论】:

          【解决方案6】:

          我可能迟到了,但这对我有用:


          1. 打开位于项目目录中的 build.xml 文件。
          2. 将以下代码复制并粘贴到主 project 标记中: &lt;target name="build" /&gt;

          【讨论】:

            猜你喜欢
            • 2011-10-06
            • 1970-01-01
            • 1970-01-01
            • 2011-06-21
            • 1970-01-01
            • 1970-01-01
            • 2019-03-04
            • 2016-05-23
            • 1970-01-01
            相关资源
            最近更新 更多