Originariamente inviato da lio.b
Se da shell digito prima ant init2 e poi ant compila funziona tutto a perfezione.
Sì ma non è così che dovresti usarlo!! Dovresti sfruttare le "dipendenze" .... che non hai usato completamente e perfettamente.

Ecco un esempio, minimale, ma che compila e impacchetta pure in jar, impostando correttamente il Main-Class nel manifest del jar:

codice:
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Esempio" default="package">
  <description>Build file per progetto di esempio</description>

  <target name="init">
    <property name="sources.dir" value="src" />
    <property name="build.dir" value="build" />
    <property name="classes.dir" value="${build.dir}/classes" />
    <property name="jar.file" value="esempio.jar" />
    <property name="main.class" value="EsempioMainClass" />
  </target>

  <target name="clean" depends="init" description="Pulisce">
    <delete dir="${build.dir}" />
    <delete file="${jar.file}" />
  </target>

  <target name="prepare" depends="init">
    <mkdir dir="${classes.dir}" />
  </target>

  <target name="compile" depends="prepare" description="Compila">
    <javac srcdir="${sources.dir}" destdir="${classes.dir}" />
  </target>

  <target name="package" depends="compile" description="Impacchetta">
    <jar destfile="${jar.file}">
      <fileset dir="${classes.dir}" />
      <manifest>
        <attribute name="Main-Class" value="${main.class}" />
      </manifest>
    </jar>
  </target>
</project>
Osserva bene le dipendenze e nota che il default è "package". Basta lanciare semplicemente 'ant' (senza specificare nulla) e lui fa il package, eseguendo prima tutte le dipendenze.