No se puede ejecutar el código Java después de compilar con ANT

Tengo la siguiente estructura de proyecto:

ProjectDir
-src
-libro
-datos

srcson los archivos fuente de Java, libcontienen varios archivos JAR externos que usa mi proyecto y datacontienen una variedad de archivos de texto que el programa usa para almacenar y hacer referencia a datos. Hasta ahora he hecho todo mi desarrollo en un IDE (obviamente) y todo ha estado bien, pero estoy tratando de escribir un archivo de compilación que compila el código (con los JAR en el classpath) y se puede ejecutar con los datos archivos. Ha pasado un tiempo desde que hice una compilación con ANT, así que estoy seguro de que este es un problema simple, pero no puedo hacer que el script de compilación funcione correctamente.

A continuación se muestra el archivo ant:

<project name="CMSC491Project" basedir="." default="main">

    <property name="src.dir"     value="src"/>

    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="lib.dir"     value="lib"/>

    <property name="main.class"  value="parse.Driver"/>
    <property name="args"     value="?"/>



    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <fileset id="lib" dir="${lib.dir}">
        <include name="*.jar"/>
    </fileset>

    <path id="build.classpath">
        <fileset refid="${lib.dir}"/>
    </path>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>

        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpattarget='_blank' href="build.classpath"/>
    </target>

    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
        <attribute name="Class-Path" value="${lib.dir}/javahash ${lib.dir}/twitter4j-core-2.2.5 ${lib.dir}/twitter4j-stream-2.2.5"/>
            </manifest>
        </jar>
    </target>

    <target name="clean-build" depends="clean,jar"/>

    <target name="main" depends="clean,jar"/>

    <target name="run" depends="compile" description="run the project">
        <java dir="${classes.dir}" classname="${main.class}" fork="yes">
            <arg line="${args}"/>
        </java>
    </target>

</project>

Se compila bien, pero si lo intento ant run, aparece un error que dice que Java no puede encontrar una de las clases de uno de los archivos JAR del directorio de datos.

No estoy seguro de lo que necesita que haga, pero gracias de antemano.

Respuesta 1

Usas diren la javatarea de hormigas. Eso le dice a su JVM que invoque el proceso en ese directorio. Echa un vistazo a los documentos aquí . Debería referirse al jar ya sea vía jaro classpathatributo. Intente cambiar su configuración de compilación a:

<path id="build.classpath">         
    <fileset refid="lib"/>
    <fileset dir="${classes.dir}"/>     
</path>

<target name="run" depends="compile" description="run the project">
    <java classpattarget='_blank' href="build.classpath" classname="${main.class}" fork="yes">
        <arg line="${args}"/>
    </java>
</target>

EDITAR (Incluir classpathref en la compilación)

Respuesta: 2

Escribí un código esta semana para generar archivos zip, e intenté usarlo en máquinas Windows y Mac. Mac funciona bien (fue escrito con Mac en mente) pero Windows no tanto. Los archivos zip resultantes, ...

Tengo un problema al crear la clase RMIserver porque sigo recibiendo este error: acceso denegado (java.net.SocketPermission 127.0.0.1:1099 connect, resolve) ahora leo en google algo sobre ...

Quiero crear una aplicación de chat que tenga un cliente de escritorio. Además, quiero que haya algún tipo de software en mi servidor que sea responsable de llevar a cabo todos los ...

El código de la página es el siguiente: <td align = "center" width = "50%"> <input type = "button" id = "M_860735" value = "Continue" class = "entereclass" style = "background- imagen: inicial; fondo -...