En mi código fuente de Java, quiero usar diferentes clases de archivos java (.jar) almacenados en el directorio "lib" de mi aplicación. Pero si lo hago "ant run", siempre aparece el mensaje "java.lang.NoClassDefFoundError". Intenté varias cosas para arreglarlo pero nada funcionó ... ¿Tal vez alguien aquí puede ayudarme?¿Cómo incluir bibliotecas externas en el archivo Ant build.xml?
Ésta es mis build.properties archivo:
app.name=MyApplication
app.version=1.0
main.class=mypackage.MyMain
build.dir=build
classes.dir=${build.dir}/classes
jar.dir=${build.dir}/jar
dist.dir=dist
src.dir=src
test.dir=test
lib.dir=lib
Ésta es mi build.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="My Project" default="run" basedir=".">
<description>My description.</description>
<property file="build.properties" />
<path id="classpath">
<fileset dir="${lib.dir}" includes="*.jar"/>
</path>
<!-- Initialization -->
<target name="init" description="Prepare needed directories.">
<mkdir dir="${build.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${jar.dir}" />
<mkdir dir="${dist.dir}" />
<mkdir dir="${lib.dir}" />
</target>
<!-- Cleanup -->
<target name="clean" description="Remove all files created by the build/test process.">
<delete dir="${classes.dir}" />
<delete dir="${dist.dir}" />
</target>
<!-- Compile application -->
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
debug="yes"
includeantruntime="false">
<!-- <classpath refid="classpath" /> -->
</javac>
</target>
<!-- Java Archive -->
<target name="jar" depends="compile">
<!--<delete file="${jar.dir}/${app.name}-${app.version}.jar"/>-->
<delete dir="${jar.dir}"/>
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${app.name}-${app.version}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Class-Path" value="${lib.dir}"/>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
</target>
<!-- Run application -->
<target name="run" depends="jar">
<java jar="${jar.dir}/${app.name}-${app.version}.jar"
fork="true">
</java>
<!--
<java fork="true" classname="${main.class}">
<classpath>
<path refid="classpath"/>
<path location="${jar.dir}/${app.name}-${app.version}.jar"/>
</classpath>
</java>
-->
</target>
</project>
Sería bueno si alguien puede ayudar.
¡Salud!
Benny
lo que se ve su directorio 'lib' como? ¿Están todos los archivos jar abandonados en ese directorio, o hay subdirectorios? –
Todos los archivos jar están en ese directorio (sin ningún subdirectorio). La estructura se ve como: ./lib/log4j-1.2.9.jar,./lib/cobertura.jar, ./lib/easymock-3.0.jar, ... ¿Cómo puedo incluir esas bibliotecas en mi archivo jar? –