2009-07-02 11 views
0

J'ai construit un pot en utilisant IntelliJ, en définissant la classe principale correctement. Lorsque j'exécute "java -jar foo.jar" à partir de la ligne de commande (Windows), j'obtiens une exception qui prétend que le fichier principal est manquant. La classe principale ressemble à quelque chose comme:NoClassDefFond lors de l'exécution d'un pot

package mypackage; 

public class LockUtil { 
    public static void main(String[] args) { 
    ... 

Je reçois l'exception suivante:

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil 
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 
Could not find the main class: mypackage.LockUtil. Program will exit. 

Le fichier manifeste contient:

Manifest-Version: 1.0 
Created-By: IntelliJ IDEA 
Main-Class: mypackage.LockUtil 

Et le pot contient la structure de répertoire approprié avec le fichier .class.

Répondre

1

Vous essayez d'exécuter mypackage.LockUtil, mais vous devez utiliser mypackage.locking.LockUtil (notez l'instruction package au début de la classe.).

Une autre possibilité est que vous avez déplacé la classe et oublié la mise à jour l'instruction package.

+0

Désolé, ce fut une erreur dans l'affichage - le nom du paquet est correct si ... (J'ai mis à jour la question) – ripper234

0

Il semble que le nom de votre colis est mypackage.locking et non seulement mypackage

0

Il semble que votre définition principale de la classe dans votre manifeste montre du doigt mypackage/LockUtil plutôt que mypackage/verrouillage/LockUtil.

-Rick

2

Si vous java -tf foo.jar, voyez-vous quelque chose comme ça?

META-INF/ 
META-INF/MANIFEST.MF 
mypackage/ 
mypackage/LockUtil.class 

Peut-être qu'il existe un autre niveau de répertoire quelque part?

Vous pouvez être sûr que Java connaît le fichier principal est là en construisant le fichier jar avec quelque chose comme ceci:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class 
1

Est-ce que LockUtil ont une dépendance à une autre classe qui ne sont pas résoluble, ce qui ne permet pas LockUtil charger?