简体   繁体   English

Ant构建失败:“Target”build..xml“不存在”

[英]Ant build failed: “Target ”build..xml“ does not exist”

When I run the ant file in verbose mode, I got an error like the one below. 当我以详细模式运行ant文件时,我收到如下错误的错误。 Does anyone have any ideas what is going wrong? 有没有人有任何想法会出错? I am new to this 我是新来的

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

This is my build.xml : 这是我的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>

since your ant file's name is build.xml, you should just type ant without ant build.xml. 因为您的ant文件的名称是build.xml,所以您只需键入ant而不使用ant build.xml。 that is: > ant [enter] 那就是: > ant [enter]

  1. Probably you don't have environment variable ANT_HOME set properly 可能你没有正确设置环境变量ANT_HOME
  2. It seems that you are calling Ant like this: "ant build..xml". 看来你正在调用这样的Ant:“ant build..xml”。 If your ant script has name build.xml you need to specify only a target in command line. 如果您的ant脚本具有名称build.xml,则需要在命令行中仅指定目标。 For example: "ant target1". 例如:“ant target1”。

Looks like you called it 'ant build..xml'. 看起来你称之为'ant build..xml'。 ant automatically choose a file build.xml in the current directory, so it is enough to call 'ant' (if a default-target is defined) or 'ant target' (the target named target will be called). ant会自动选择当前目录中的文件build.xml,因此只需调用'ant'(如果定义了default-target)或'ant target'(将调用目标命名目标)。

With the call 'ant -p' you get a list of targets defined in your build.xml. 通过调用'ant -p',您将获得build.xml中定义的目标列表。

Edit: In the comment is shown the call 'ant -verbose build.xml'. 编辑:在注释中显示调用'ant -verbose build.xml'。 To be correct, this has to be called as 'ant -verbose'. 为了正确,这必须被称为'ant -verbose'。 The file build.xml in the current directory will be used automatically. 将自动使用当前目录中的文件build.xml。 If it is needed to explicitly specify the buildfile (because it's name isn't build.xml for example), you have to specify the buildfile with the '-f'-option: 'ant -verbose -f build.xml'. 如果需要显式指定构建文件(因为它的名称不是build.xml),则必须使用'-f'选项指定构建文件:'ant -verbose -f build.xml'。 I hope this helps. 我希望这有帮助。

in the folder where the build.xml resides run command only - 在build.xml所在的文件夹中仅运行命令 -

ant 蚂蚁

and not the command - ` 而不是命令 - `

ant build.xml ant build.xml

` `

. if you are using the ant file as build xml then the below steps helps you Steps : open cmd Prompt >> switch to the project location >>type ant and click enter key 如果您使用ant文件作为build xml,那么以下步骤可以帮助您步骤:打开cmd提示>>切换到项目位置>>键入ant并单击Enter键

Is this a problem Only when you run ant -d or ant -verbose, but works other times ? 这是一个问题只有当你运行ant -d or ant -verbose, but works other times 才能运行ant -d or ant -verbose, but works other times

I noticed this error message line: 我注意到这条错误消息行:

Could not load definitions from resource org/apache/tools/ant/antlib.xml. It could not be found.

The org/apache/tools/ant/antlib.xml file is embedded in the ant.jar . org/apache/tools/ant/antlib.xml 文件嵌入在ant.jar The ant command is really a shell script called ant or a batch script called ant.bat . ant命令实际上是一个名为ant的shell脚本或一个名为ant.bat的批处理脚本。 If the environment variable ANT_HOME is not set, it will figure out where it's located by looking to see where the ant command itself is located. 如果未设置环境变量ANT_HOME,它将通过查看ant命令本身所在的位置来确定它所在的位置。

Sometimes I've seen this where someone will move the ant shell/batch script to put it in their path, and have ANT_HOME either not set, or set incorrectly. 有时候我已经看到有人会移动ant shell / batch脚本将它放在路径中,并且ANT_HOME要么没有设置,要么设置不正确。

What platform are you on? 你在什么平台上? Is this Windows or Unix/Linux/MacOS? 这是Windows还是Unix / Linux / MacOS? If you're on Windows, check to see if %ANT_HOME% is set. 如果您使用的是Windows,请检查是否设置了%ANT_HOME%。 If it is, make sure it's the right directory. 如果是,请确保它是正确的目录。 Make sure you have set your PATH to include %ANT_HOME%/bin . 确保已将PATH设置为包含%ANT_HOME%/bin

If you're on Unix, don't copy the ant shell script to an executable directory. 如果您使用的是Unix,请不要将ant shell脚本复制到可执行目录。 Instead, make a symbolic link. 相反,建立一个符号链接。 I have a directory called /usr/local/bin where I put the command I want to override the commands in /bin and /usr/bin . 我有一个名为/usr/local/bin的目录,我在其中放置了我想要覆盖/bin/usr/bin的命令的命令。 My Ant is installed in /opt/ant-1.9.2 , and I have a symbolic link from /opt/ant-1.9.2 to /opt/ant . 我的Ant安装在/opt/ant-1.9.2 ,我有一个从/opt/ant-1.9.2/opt/ant的符号链接。 Then, I have symbolic links from all commands in /opt/ant/bin to /usr/local/bin . 然后,我有/opt/ant/bin所有命令到/usr/local/bin符号链接。 The Ant shell script can detect the symbolic links and find the correct Ant HOME location. Ant shell脚本可以检测符号链接并找到正确的Ant HOME位置。

Next, go to your Ant installation directory and look under the lib directory to make sure ant.jar is there, and that it contains org/apache/tools/ant/antlib.xml . 接下来,转到Ant安装目录并查看lib目录以确保ant.jar存在,并且它包含org/apache/tools/ant/antlib.xml You can use the jar tvf ant.jar command. 您可以使用jar tvf ant.jar命令。 The only thing I can emphasize is that you do have everything setup correctly. 我唯一可以强调的是你确实正确设置了所有东西。 You have your Ant shell script in your PATH either because you included the bin directory of your Ant's HOME directory in your classpath, or (if you're on Unix/Linux/MacOS), you have that file symbolically linked to a directory in your PATH. 您在PATH中有Ant shell脚本,因为您在类路径中包含了Ant的HOME目录的bin目录,或者(如果您在Unix / Linux / MacOS上),您将该文件符号链接到您的目录中路径。

Make sure your JAVA_HOME is set correctly (on Unix, you can use the symbolic link trick to have the java command set it for you), and that you're using Java 1.5 or higher. 确保你的JAVA_HOME设置正确(在Unix上,你可以使用符号链接技巧让java命令为你设置它),并且你正在使用Java 1.5或更高版本。 Java 1.4 will no longer work with newer versions of Ant. Java 1.4将不再适用于较新版本的Ant。

Also run ant -version and see what you get. 同时运行ant -version ,看看你得到了什么。 You might get the same error as before which leads me to think you have something wrong. 您可能会遇到与以前相同的错误,这会让我认为您有错误。

Let me know what you find, and your OS, and I can give you directions on reinstalling Ant. 让我知道你找到了什么,你的操作系统,我可以给你关于重新安装Ant的指示。

I'm probably late but this worked for me: 我可能迟到但这对我有用:


  1. Open your build.xml file located in your project's directory. 打开位于项目目录中的build.xml文件。
  2. Copy and Paste the following code in the main project tag : <target name="build" /> 将以下代码复制并粘贴到主项目标记中: <target name="build" />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM