Impossible de trouver ou charger la classe principale avec un Fichier Jar
Je suis en train de charger un bocal à l'aide de
@echo off
java -jar Test.jar
pause
Avec le manifeste de
Manifest-Version: 1.0
Main-Class: classes.TestClass
Dans le Pot répertoire, je peux clairement voir une classes\TestClass fichier quand je l'extraire.
Edit: classes.TestClass
a un public static void main(String[] args)
.
Paquet de Décélération en classes.TestClass
est package classes;
Mais je reçois le message d'erreur
Could not find or load main class classes.TestClass
J'ai été à travers tout ce que j'ai pu trouver à ce problème, et aucun ne semble aider.
J'ai essayé d'éditer le chemin de la classe, de refaire le manifeste, l'installation de la nouvelle JRE.
Que dois-je faire?
- Ne TestClass contenir une fonction principale?
- Oui, il a une méthode main.
- Êtes-vous sûr que le nom de package pour
TestClass
estclasses
? - est TestClass dans les classes du package? Je suggère d'exécuter le fichier à partir de la ligne de commande une fois. Si le succès puis aller de l'avant.
- Oui,
package classes;
- Si je test la classe à l'aide d'Eclipse avant que je l'exporter dans un .pot, il fonctionne très bien.
- Charger le pot avec juste la
java
de commande. N'utilisez pas de@echo off
etpause
, vous êtes juste compliquer les choses jusqu'à ce que vous résoudre le problème. - Alors, comment avez-vous pot? est le TestClass.class fichier jared en vertu d'un dossier de classes?
- Vous êtes confus
classes
le répertoire de sortie avecclasses
le paquet.
Vous devez vous connecter pour publier un commentaire.
Je l'ai eu à travailler comme cela:
TestClass.Java
Utilisation
javac
sur la ligne de commande pour produireTestClass.class
. MettreTestClass.class
dans un dossierclasses/
.MANIFESTE.MF
Puis exécutez
Puis l'exécuter en tant que
>%JAVAHOME%\bin\jar cfM MANIFEST.MF test.jar classes/
résultats danstest.jar : no such file or directory
etMANIFEST.JS
est maintenant brisé (son fichier binaire maintenant).pour exécuter toute autre classe d'avoir "public static void main" dans un paquet,
1.Créer un fichier texte calles Manifest.txt et de fournir la valeur qu'
2.Créer le jar que
3.Exécutez le bocal comme
J'ai juste eu le même problème à la fin de son parce que j'ai copié et collé le code de word et c'était un peu différent type de caractère '-' utilisé, c'est tout ce que je pense, quand j'ai tapé dans la main il a travaillé
C'est très difficile à déboguer sans une information complète.
Les deux plus probables sont-regard sur les choses à ce point sont que soit le fichier dans le bocal n'est pas stocké dans un répertoire DANS LE POT, ou qu'il n'est pas le bon fichier.
Vous avez besoin de stocker TestClass.class - certaines personnes nouvelles à ce magasin le fichier source, TestClass.java.
Et vous avez besoin de créer le fichier jar, de sorte que TestClass.class s'affiche avec un chemin de classes. Assurez-vous qu'il n'est pas "/classes". Utilisez zip à regarder le fichier et assurez-vous qu'il possède un chemin de "classes".
J'ai eu un problème similaire sur lequel j'ai pu résoudre par l'octroi de l'exécution de privilèges pour tous les dossiers parent qui le jar-file est situé (sur un système linux).
Exemple:
/folder1/folder2/folder3/executable.jar
tous les 3 dossiers (dossier1, dossier2 et dossier3) ainsi que le executable.jar besoin d'exécuter les privilèges de l'utilisateur courant, sinon le message d'erreur "impossible de trouver ou charger la classe principale de ..." est renvoyé.
J'ai eu une drôle de question quand une entrée incorrecte dans le MANIFESTE.MF était à l'origine de chargement de l'échec. C'était quand j'ai essayé de lancer très simplement scala programme:
Incorrect:
Correct:
Avec une mauvaise version, je recevais un message cryptique, le même que l'OP n'. Probablement, il devrait dire quelque chose comme url mal formée d'exception lors de l'analyse du fichier de manifeste.
À l'aide d'un chemin d'accès absolu au fichier manifeste est ce que l'Ide utilise pour fournir un long chemin de un programme.
Au moins la façon dont je l'ai fait c'est comme suit:
Si vous avez un imbriquée src arbre (dire com.test.myclass.MyClass) et vous compilez à partir d'un répertoire racine, vous devez effectuer les opérations suivantes:
1) lorsque vous créez le pot (l'habitude de mettre cela dans un script):
jar cvfm my.jar com/test/myclass/manifest.txt com/test/myclass/MyClass.class
2) Le manifeste doit ressembler à:
Mainfest-version: 1.0
Principal-Classe: com.test.myclass.MyClass
Class-Path: . my.jar
3) vous pouvez Maintenant exécuter le pot à partir de n'importe où, comme ceci:
java-jar my.jar
Espère que cela aide quelqu'un
Je suivez les instructions suivantes pour créer un exécutable .jar dans Eclipse. Puis de lancer la commande "java-jar .jar pour lancer le programme.
Il prend soin de créer mainfest et includeing classe principale et les fichiers de bibliothèque de pièces pour vous.
http://java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
Je sais que c'est une vieille question, mais j'ai eu ce problème récemment et aucune réponse ne m'a aidé. Cependant, Corral commentaire de Ryan Atkinson réponse n'a la pointe de m'arracher à ce problème.
J'ai eu tous mes compilé les fichiers de classe dans
target/classes
, qui ne sont pas emballés, dans mon cas. J'ai essayé de le paquet avecjar cvfe App.jar target/classes App
, à partir du répertoire racine de mon projet, de mon Appli classe était en défaut sans nom de package.Cela ne fonctionne pas, comme le nouvellement créé
App.jar
aura la classeApp.class
dans le répertoiretarget/classes
. Si vous essayez d'exécuter ce pot avecjava -jar App.jar
, il va se plaindre qu'il ne peut pas trouver leApp
classe. C'est parce que les paquets à l'intérieur deApp.jar
ne correspondent pas, les paquets réels dans le projet.Cela pourrait être résolu par la création du jar directement à partir de la
target/classes
répertoire, à l'aide dejar cvfe App.jar . App
. C'est plutôt lourd à mon avis.La solution la plus simple consiste à répertorier les dossiers que vous souhaitez ajouter à la
-C
option au lieu d'utiliser la méthode par défaut de la liste des dossiers. Donc, dans mon cas, la commande correcte estjava cvfe App.jar App -C target/classes .
. Cela permettra d'ajouter directement tous les fichiers dans letarget/classes
répertoire à la racine deApp.jar
, ainsi résoudre le problème.Cette erreur vient même si vous manquez "-" par erreur avant le mot jar
Mauvaise commande
java jar test.jar
Commande correcte
java -jar test.jar
J'ai eu cette erreur parce que j'ai écrit un mauvais Chemin de Classe dans mon
MANIFEST.MF
J'ai reçu le même message d'erreur après le transfert de fichier jar par FTP et j'ai oublié de définir le mode binaire.
J'ai un incorret de chemin de classe librarie et de résoudre les même erreur