web-dev-qa-db-fra.com

La génération Ant a échoué: "Target" build..xml "n'existe pas"

Lorsque j'exécute le fichier ant en mode prolixe, j'ai une erreur comme celle ci-dessous. Quelqu'un a-t-il une idée de ce qui ne va pas? Je suis nouveau à cela

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

C'est mon 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>
18
christy

puisque le nom de votre fichier ant est build.xml, vous devez simplement taper ant sans ant build.xml ..__, c’est-à-dire: > ant [entrer]

18
duracell
  1. Vous n'avez probablement pas la variable d'environnement ANT_HOME définie correctement
  2. Il semble que vous appeliez Ant comme ceci: "ant build..xml". Si votre script ant s'appelle build.xml, vous devez uniquement spécifier une cible en ligne de commande. Par exemple: "ant target1".
10
wheleph

On dirait que vous l'avez appelé 'ant build..xml'. ant choisit automatiquement un fichier build.xml dans le répertoire actuel. Il suffit donc d'appeler 'ant' (si une cible par défaut est définie) ou 'ant target' (la cible nommée sera appelée).

Avec l'appel 'ant -p', vous obtenez une liste de cibles définies dans votre build.xml.

Edit: Dans le commentaire, l'appel 'ant -verbose build.xml' est affiché. Pour être correct, cela doit s'appeler «ant -verbose». Le fichier build.xml dans le répertoire actuel sera utilisé automatiquement. S'il est nécessaire de spécifier explicitement le fichier de construction (car son nom n'est pas build.xml par exemple), vous devez spécifier le fichier de construction avec l'option '-f':' ant -verbose -f build.xml '. J'espère que ça aide.

8
Mnementh

dans le dossier où réside le build.xml, exécutez la commande uniquement - 

fourmi

et non la commande - `

ant build.xml

`

. si vous utilisez le fichier ant en tant que build xml, les étapes ci-dessous vous aideront:

3
Ranjith Venkatesh

Est-ce un problèmeuniquementlorsque vous exécutez ant -d or ant -verbose, but works other times?

J'ai remarqué cette ligne de message d'erreur:

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

Le org/Apache/tools/ant/antlib.xmlfichier est incorporé dans le ant.jar. La commande ant est en réalité un script Shell appelé ant ou un script de traitement par lots appelé ant.bat. Si la variable d'environnement ANT_HOME n'est pas définie, elle déterminera où elle se trouve en cherchant où se trouve la commande ant.

Parfois, j’ai vu le cas où une personne déplacera le script shell/batch ant pour le mettre dans son chemin, et que ANT_HOME ne sera pas défini ou ne sera pas défini correctement.

Sur quelle plateforme es-tu? Est-ce Windows ou Unix/Linux/MacOS? Si vous utilisez Windows, vérifiez si% ANT_HOME% est défini. Si c'est le cas, assurez-vous que c'est le bon répertoire. Assurez-vous que vous avez configuré votre PATH pour inclure %ANT_HOME%/bin

Si vous êtes sous Unix, ne copiez pas le script ant Shell dans un répertoire exécutable. Au lieu de cela, faites un lien symbolique. J'ai un répertoire appelé /usr/local/bin où je mets la commande je veux remplacer les commandes dans /bin et /usr/bin. Mon Ant est installé dans /opt/ant-1.9.2 et j'ai un lien symbolique de /opt/ant-1.9.2 à /opt/ant. Ensuite, j'ai des liens symboliques de toutes les commandes dans /opt/ant/bin à /usr/local/bin. Le script Ant Shell peut détecter les liens symboliques et trouver le bon emplacement Ant HOME.

Ensuite, allez dans votre répertoire d’installation Ant et regardez sous le répertoire lib pour vous assurer que ant.jar est présent et qu’il contient org/Apache/tools/ant/antlib.xml. Vous pouvez utiliser la commande jar tvf ant.jar. La seule chose sur laquelle je peux insister, c'est que vous avez tout configuré correctement. Vous avez votre script Ant Shell dans votre PATH, soit parce que vous avez inclus le répertoire bin du répertoire HOME de votre Ant dans votre chemin d'accès aux classes, soit CHEMIN.

Assurez-vous que Java_HOME est défini correctement (sous Unix, vous pouvez utiliser l'astuce du lien symbolique pour que la commande Java le définisse à votre place) et que vous utilisiez Java 1.5 ou une version ultérieure. Java 1.4 ne fonctionnera plus avec les nouvelles versions de Ant.

Exécutez également ant -version et voyez ce que vous obtenez. Vous pourriez avoir la même erreur qu'auparavant, ce qui m'amène à penser que quelque chose ne va pas.

Faites-moi savoir ce que vous trouvez, et votre système d'exploitation, et je peux vous donner des instructions sur la réinstallation de Ant.

0
David W.

Je suis probablement en retard mais cela a fonctionné pour moi:


  1. Ouvrez votre fichier build.xml situé dans le répertoire de votre projet.
  2. Copiez et collez le code suivant dans la balise principale project: <target name="build" />
0
abilasco