2014-01-11 2 views
0

Я пытаюсь построить работоспособную JAR файл проекта с помощью build.xml файла и быстрого кодаJAR файл NoClassDefFoundError

cd <the directory of you application> 
    ant -f bin/build.xml jar 

Но у меня есть исключения, когда я бег JAR, потому что я не могу добавить внешнее JAR.

build.xml выглядит следующим образом:

<?xml version="1.0" encoding="ISO-8859-1" ?> 

<!-- 

        This file was generated by Jason 1.3.9-alpha 
        http://jason.sf.net 

        Ocak 11, 2014 - 01:09:12 
--> 

<project name ="virtualClassroom" 
     basedir=".." 
     default="run"> 

    <property name="mas2j.project.file" value="virtualClassroom.mas2j"/> 
    <property name="debug" value=""/> <!-- use "-debug" to run in debug mode --> 
    <property name="build.dir" value="${basedir}/bin/classes" /> 

    <property name="jasonJar" value="C:\Users\Emre\Desktop\MasterThesis-BDI\Jason-1.3.9\Jason-1.3.9\lib\jason.jar"/> 
    <property name="JavaCsBridgeJar" value="C:\Users\Emre\Desktop\MasterThesis-BDI\virtualClassroom\lib\JavaCsBridge.jar"/> 

    <path id="project.classpath"> 
     <pathelement location="${basedir}"/> 
     <pathelement location="${build.dir}"/> 
     <pathelement location="${JavaCsBridgeJar}"/> 
     <pathelement location="${jasonJar}"/> 
     <fileset dir="${basedir}/lib" > <include name="*.jar" /> </fileset> 
    </path> 


    <!-- tasks the user can override in his/her c-build.xml script --> 
    <target name="user-init"> 
    </target> 
    <target name="user-end"> 
    </target> 

    <target name="init"> 
     <mkdir dir="${build.dir}" /> 
     <antcall target="user-init" /> 
    </target> 

    <target name="compile" depends="init"> 
     <condition property="srcdir" value="${basedir}/src/java" else="${basedir}" > 
      <available file="${basedir}/src/java" /> 
     </condition> 
     <javac srcdir="${srcdir}" destdir="${build.dir}" debug="true" optimize="true" includeantruntime="false" > 
      <classpath refid="project.classpath"/> 
     </javac> 
    </target> 

    <target name="jar" depends="compile"> 
     <delete file="${ant.project.name}.jar" /> 
     <copy file="${jasonJar}" tofile="${ant.project.name}.jar" /> 
     <copy file="${JavaCsBridge}" tofile="${ant.project.name}.jar" /> 
     <copy file="${mas2j.project.file}" tofile="default.mas2j" /> 
     <jar update="yes" jarfile="${ant.project.name}.jar" > 
      <fileset dir="${basedir}"> 
       <include name="**/*.asl" /> 
       <include name="**/*.mas2j" /> 
      </fileset> 
      <fileset dir="${build.dir}"> 
       <include name="**/*.class" /> 
      </fileset> 
      <manifest> 
        <attribute name="Main-Class" value="jason.infra.centralised.RunCentralisedMAS"/> 
      </manifest> 
     </jar> 
     <delete file="default.mas2j" /> 
    </target> 


    <target name="jnlp" depends="jar" > 
     <mkdir dir="${basedir}/${ant.project.name}-jws"/> 
     <java classname="jason.infra.centralised.CreateJNLP" 
       failonerror="true" fork="yes" dir="${basedir}/${ant.project.name}-jws" > 
      <classpath refid="project.classpath"/> 
      <arg line="${ant.project.name} ${mas2j.project.file}"/> 
     </java> 
     <copy todir="${basedir}/${ant.project.name}-jws" failonerror="no"> 
      <fileset dir="${basedir}/lib" includes="**/*.jar" /> 
      <fileset dir="${basedir}" includes="${ant.project.name}.jar" /> 
      <fileset dir="C:\Users\Emre\Desktop\MasterThesis-BDI\Jason-1.3.9\Jason-1.3.9/src/images" includes="Jason-GMoreau-Icon.jpg" /> 
     </copy> 
     <signjar jar="${basedir}/${ant.project.name}-jws/${ant.project.name}.jar" alias="jason" 
      storepass="rbjhja" keypass="rbjhja" keystore="C:\Users\Emre\Desktop\MasterThesis-BDI\Jason-1.3.9\Jason-1.3.9/src/jasonKeystore" /> 
     <echo message="**" /> 
     <echo message="** Java Web Start application created in directory ${ant.project.name}-jws" /> 
     <echo message="** Update the codebase (in the second line of the .jnlp file)" /> 
     <echo message="** with the URL where you will upload the application." /> 
     <echo message="**" /> 
    </target> 


    <target name="run" depends="compile" > 
     <echo message="Running project ${ant.project.name}" /> 
     <java classname="jason.infra.centralised.RunCentralisedMAS" 
       failonerror="true" fork="yes" dir="${basedir}" > 
      <classpath refid="project.classpath"/> 
      <arg line="${mas2j.project.file} ${debug} "/> 
      <!-- jvmarg line="-Xmx500M -Xss8M"/ -->  
     </java> 
     <antcall target="user-end" /> 
    </target> 

    <target name="clean" > 
     <delete failonerror="no" includeEmptyDirs="true" verbose="true"> 
      <fileset dir="${basedir}" includes="**/*.class"/> 
     </delete> 
    </target> 



</project> 

ли кто-нибудь знает, что делать?

Благодаря

+0

Возможный дубликат [Не удается найти главный класс в файле, скомпилированном с помощью Ant] (http://stackoverflow.com/questions/3143567/cannot-find-main-class-in-file-compiled-with-ant) –

ответ

0

Во-первых, вы должны сказать нам, какой именно класс дает NoClassDefFoundError Как общий ответ, объяснение в том, что конкретный класс был доступен во время компиляции, но отсутствует во время выполнения. Это обычная проблема с исполняемыми файлами jar.

Решение: Либо включить недостающие классы в банку, либо добавить их в системный путь к классам.

+0

Здравствуйте. , Я получаю NoClassDefFoundError для JavaCsBridge.jar, который я пытаюсь добавить. Как я могу добавить этот файл jar в путь к системе? Я немного запутался в classpath –

+0

Я включил все классы в банку, и проблема решена, но я не смог бы этого сделать, если бы у меня не было исходного кода. –

Смежные вопросы