During my Java source-code I wish to use different classes from java archives (.jar) saved during my application's "lib" directory. But when I actually do "ant run" i quickly always obtain a "java.lang.NoClassDefFoundError" message. I attempted a number of things to repair it but nothing labored... Maybe someone here might help me?

This really is my build.qualities 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

This really is my 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>

It might be nice if anybody may help.

Cheers!

Benny

I see you have been attempting to set your classpath for that <java> task.

Perhaps you have attempted:

<java jar="${jar.dir}/${app.name}-${app.version}.jar" fork="true">
  <classpath refid="classpath" />
</java>

EDIT: make sure the values inside your qualities file. Have you got trailing spaces for the need for lib.dir or jar.dir?

http://ant.apache.org/faq.html#properties-not-trimmed

ant unsuccessful to construct my program via javac even if I place the needed jars within an exterior build.qualities file and reference them by pathelement or classpath refid.

When ant loads qualities from an exterior file it does not touch the worth of qualities, trailing blanks won't be trimmed for instance.

When the value signifies personal files path, just like a jar required to compile, the job which necessitates the value, javac for example would neglect to compile because it aren't able to find the file because of trailing spaces.