2014-07-24 3 views
0

J'utilise des fichiers jar externes dans mon programme. Un de ce pot est créé par moi. Lorsque j'utilise ce fichier jar dans un projet eclipse, cela fonctionne correctement. Mais quand j'essaye de faire la même chose en utilisant Ant, cela montre NoClassDefFoundError. Il n'a pas été en mesure d'obtenir la classe dans mon fichier jar.java.lang.NoClassDefFoundError lors de l'exécution ant

Ma méthode principale est comme ceci:

import pckg.harness.SomeClass; 

public class Main { 
    public static void main(String[] args) 
{ 
     SomeClass someClass=new SomeClass(); 
     someClass.runSomeMethod(); 
    } 
} 

Mon build.xml est comme:

<project basedir="." default="run" name="project"> 
    <property name="src" location="src" /> 
    <property name="libs" location="lib" /> 
    <path id="class.path"> 
     <pathelement location="${libs}/ExtJarOne.jar" /> 
     <pathelement location="${libs}/ExtJarTwo.jar" /> 
     <pathelement location="${libs}/ExtJarThree.jar" /> 
     <pathelement location="bin" /> 
    </path> 

<target name="compile"> 
    <javac classpathref="class.path" srcdir="${src}" destdir="./bin"/> 
    </target> 

    <target name="jar" depends="compile"> 
     <mkdir dir="jar"/> 
    <jar destfile="./jar/Class.jar" basedir="./bin"> 
     <manifest> 
      <attribute name="Main-Class" value="pckg.main.Main"/> 
    </manifest> 
     </jar> 
    </target> 

    <target name="run" depends="jar"> 
     <java jar="./jar/Class.jar" fork="true"/> 
    </target> 

</project> 

Maintenant, quand je suis en ma fourmi, je reçois l'erreur suivante:

run: 
    [java] Exception in thread "main" java.lang.NoClassDefFoundError: pckg/harn 
ess/SomeClass 
    [java]  at pckg.main.Main.main(Unknown Source) 
    [java] Caused by: java.lang.ClassNotFoundException: pckg.harness.SomeClass 
    [java]  at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    [java]  at java.security.AccessController.doPrivileged(Native Method) 
    [java]  at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    [java]  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 

    [java]  at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    [java]  ... 1 more 
    [java] Java Result: 1 
+0

duplication possible de [Impossible de trouver la classe principale dans le fichier compilé avec Ant] (http://stackoverflow.com/questions/3143567/cannot-find-main-class-in-file-compiled-with-ant) . Si vous exécutez le fichier jar en tant qu'exécutable, vous devez inclure le chemin de classe dans le manifeste. –

Répondre

1

Étant donné que SomeClass ne fait pas partie de votre Class.jar, vous devez définir un chemin de classe pour la cible java:

Questions connexes