Ejecute un programa Java desde un archivo Ant Build

Así que escribí un archivo ant build.xml donde tomo los archivos de clase de dos programas Java, uno que extiende el otro, los empaqueta en dos archivos jar separados y luego los inicia.

<java classname="Main">
             <classpath>
                  <pathelement location="${mainDir}"/>
                  <pathelement path="${Main-Class}"/>
             </classpath>
       </java>

Cada vez que invoco a hormiga, dice que no se puede encontrar "Principal". Puedo publicar el resto del archivo build.xml si es necesario, pero en realidad es solo esta parte la que me confunde. Estoy bastante seguro de que tengo el nombre de clase correcto, pero mi mayor problema es descubrir qué entra en la ubicación y la ruta. En este momento solo tengo variables ficticias.

EDITAR: Aquí está todo el archivo.

<?xml version="1.0"?>
<project default="dist" name="webscarab">
<description>Class</description>
<property name="ClassFiles" location="..\Simple\trunk\dev\Class\bin\" />
<property name="mainClassFiles" location="..\Simple\trunk\dev\main\build\" />
<property name="buildDir" location=".\build" />
<property name="distDir" location=".\dist" />
<property name="mainDir" location="..\Simple\trunk\dev\webscarab\src\" />
<target name="init">
        <tstamp/>
        <mkdir dir="${buildDir}"/>
        <mkdir dir="${distDir}"/>
</target>
<target name="dist" depends="init">
    <jar destfile="${distDir}/package${DSTAMP}.jar" basedir="${ ClassFiles}"/>
    <jar destfile="${distDir}/package-web-${DSTAMP}.jar" basedir="${mainClassFiles}"/>
    <java classname="Main">
     <classpath>
       <pathelement location="${mainDir}"/>
       <pathelement path="${Main-Class}"/>
     </classpath>
   </java>
</target>
</project>

EDIT 2: debo mencionar que todo ya está compilado y tengo todos los archivos .class. No es algo que deba hacer en el archivo Ant.

Respuesta 1

El mensaje de error sobre "no se puede encontrar la clase" probablemente se deba a una ruta de clase incorrecta.

El classpath debe otorgar acceso a todos los archivos de clase y recursos que requiere su aplicación. Se compone de un conjunto de directorios y archivos jar. locationdenotará un solo directorio o ruta, mientras pathque denotará múltiples, separados por ;o :dependiendo de su plataforma.

En su caso, me parece que desea que su classpath consista en ${pegaFuzzClassFiles}y ${webScarabClassFiles}como directorios, o en ${distDir}/package-pega-${DSTAMP}.jary ${distDir}/package-web-${DSTAMP}.jarcomo archivos jar. Podrías hacer esto usando un solo <pathelement path="…"/>elemento, pero sugeriría múltiples, <pathelement location="…"/>ya que considero que esto es más claro.

También debe asegurarse de que las bibliotecas de terceros utilizadas por su aplicación también estén disponibles en esa ruta. Podría anidar uno o más <fileset>en eso <classpath>, cada uno de ellos describiendo todos los jararchivos en un directorio dado.

Respuesta: 2

Probablemente necesite cambiar los elementos para que apunten a los Frascos que se están creando, en este momento el classpath parecería apuntar a la fuente, lo que no funcionará ya que el classpath necesita los archivos compilados .class o los frascos que los contienen. .

También, por cuestión de estilo, también movería la tarea a un objetivo separado de 'ejecución' o 'aplicación de ejecución' que depende del objetivo dist.

Respuesta: 3

Necesita la tarea Javac para compilar su código y después de eso puede ejecutar su clase compilada. Para obtener más información sobre la tarea Javac, visite http://ant.apache.org/manual/Tasks/javac.html

El segundo consejo: se recomienda encarecidamente el uso de la barra inclinada '/', ya sea que esté en Windows o no. Cambie las ubicaciones de sus propiedades mainDir, distDir y buildDir.

Respuesta: 4

Tengo 2 Listas Java (Arraylists) de Flotadores, ListA y ListB de x e y coordinados que se parecen a: ListA = 10.1, 17.3, 30.0 ListB = 1.4, -14.7, 5.1 y quiero crear un objeto json de modo que ...

Considere este pequeño ejemplo ejecutable: import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; ...

JTable y JXTables tienen una celda de encabezado que se genera sobre la barra de desplazamiento. Es una celda pequeña pero me gustaría usarla para representar un ícono y un menú emergente. ¿Cómo puedo acceder a esta celda de encabezado? ...

Cómo cargar Struts2 MessageResources.properties en otra clase sin acción. Básicamente, el requisito es que tengo un Servlet de planificador Quartz y una clase de trabajo dentro de una aplicación web struts2. Quiero ...