Nel mio codice sorgente Java voglio utilizzare classi diverse dagli archivi java (.jar) memorizzati nella directory "lib" della mia applicazione. Ma se faccio "ant run" allora ottengo sempre un messaggio "java.lang.NoClassDefFoundError". Ho provato diverse cose per sistemarlo ma non ha funzionato ... Forse qualcuno qui può aiutarmi?Come includere librerie esterne nel file build.xml Ant?
Questo è il mio build.properties di file:
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
Questo è il mio 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>
Sarebbe bello se qualcuno potrebbe aiutare.
Cheers!
Benny
che cosa fa il tuo 'directory lib' assomiglia? Tutti i file jar sono scaricati in quella directory o ci sono sottodirectory? –
Tutti i file jar sono in quella directory (senza alcuna sottodirectory). La struttura assomiglia a: ./lib/log4j-1.2.9.jar,./lib/cobertura.jar, ./lib/easymock-3.0.jar, ... Come posso includere queste librerie nel mio file jar? –