J'essaie de charger un bocal en utilisant
@echo off
Java -jar Test.jar
pause
Avec le manifeste de
Manifest-Version: 1.0
Main-Class: classes.TestClass
Dans le répertoire Jar, je peux clairement voir un fichier classes\TestClass lorsque je l'extrais.
Edit: classes.TestClass
a une public static void main(String[] args)
.
La décélération du package dans classes.TestClass
est package classes;
Mais je continue à recevoir le message d'erreur
Could not find or load main class classes.TestClass
J'ai parcouru tout ce que j'ai pu trouver avec ce problème, et rien de tout cela ne semble aider.
J'ai essayé d'éditer le classpath, de refaire le manifeste, d'installer le nouvel environnement d'exécution JRE
Que devrais-je faire d'autre?
Je l'ai eu comme ça:
TestClass.Java
package classes;
public class TestClass {
public static void main(String[] args) {
System.out.println("Test");
}
}
Utilisez javac
sur la ligne de commande pour générer TestClass.class
. Placez TestClass.class
dans un dossier classes/
.
MANIFEST.MF
Manifest-Version: 1.0
Main-Class: classes.TestClass
Puis courir
jar cfm test.jar MANIFEST.MF classes/
Puis lancez le en tant que
Java -jar test.jar
Java -cp "chemin-complet-de-votre-jar" Main
d'exécuter toute autre classe ayant "main static statique publique" dans un package,
Java -cp "chemin-complet-de-votre-jar" package1.package2.packages-hierarchy.ClassHavingMain
1.Créez un fichier texte appelé Manifest.txt et indiquez la valeur
Classe principale: classes.TestClass
2.Créez le pot comme
jar cfm test.jar Manifest.txt classes/*. class
3.Lancez le pot comme
Java -jar test.jar
J'ai juste eu le même problème à la fin parce que j'ai copié et collé le code dans Word et que c'était un type légèrement différent de caractère '-' utilisé, c'est tout ce à quoi je peux penser, quand je l'ai tapé manuellement, cela a fonctionné
J'ai eu un problème similaire que je pouvais résoudre en accordant un privilège d'exécution à tous les dossiers parents dans lesquels se trouve le fichier jar (sur un système linux).
Exemple:
/folder1/folder2/folder3/executable.jar
les 3 dossiers (folder1, folder2 et folder3) ainsi que le fichier executable.jar nécessitent un privilège d'exécution pour l'utilisateur actuel, sinon l'erreur "Impossible de trouver ou de charger la classe principale ..." est renvoyée.
C'est très difficile à déboguer sans informations complètes.
Les deux choses les plus probables à ce stade sont que le fichier dans le fichier jar n'est pas stocké dans un répertoire WITHIN THE JAR ou qu'il ne s'agit pas du fichier correct.
Vous devez stocker TestClass.class - certaines personnes nouvelles dans ce magasin stockent le fichier source, TestClass.Java.
Et vous devez créer le fichier jar afin que TestClass.class apparaisse avec un chemin de classes. Assurez-vous que ce n'est pas "/ classes". Utilisez Zip pour regarder le fichier et assurez-vous qu’il a un chemin de "classes".
Je suis les instructions suivantes pour créer un fichier .jar exécutable dans Eclipse. Ensuite, exécutez la commande "Java -jar .jar" pour lancer le programme.
Il s’occupe de la création du mainfest et de l’inclusion des parties de fichiers de classe et de bibliothèque principales pour vous.
http://Java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html
Au moins la façon dont je l'ai fait est la suivante:
Si vous avez une arborescence src imbriquée (par exemple, com.test.myclass.MyClass) et que vous compilez à partir d'un répertoire racine, procédez comme suit:
1) lors de la création du fichier jar (généralement placé dans un script): jar -cvfm my.jar avec/test/myclass/manifeste.txt avec/test/myclass/MyClass.class
2) Le manifeste devrait ressembler à:
Mainfest-version: 1.0 Classe principale: com.test.myclass.MyClass Class-Path:. my.jar
3) Maintenant, vous pouvez lancer le pot de n'importe où comme ceci:
Java -jar my.jar
J'espère que cela aide quelqu'un
J'ai eu un problème étrange quand une entrée incorrecte dans MANIFEST.MF causait un échec de chargement. C’était à ce moment-là que j’essayais de lancer un programme très simplement scala:
Incorrect:
Main-Class: jarek.ResourceCache
Class-Path: D:/lang/scala/lib/scala-library.jar
Correct:
Main-Class: jarek.ResourceCache
Class-Path: file:///D:/lang/scala/lib/scala-library.jar
Avec une version incorrecte, je recevais un message crypté, identique à celui utilisé par l'OP. Il devrait probablement indiquer quelque chose comme l'exception malformed url lors de l'analyse du fichier manifeste.
IntelliJ utilise un chemin absolu dans le fichier manifeste pour fournir un long chemin de classe à un programme.
Je sais que c’est une vieille question, mais j’ai eu ce problème récemment et aucune des réponses ne m’a aidé. Cependant, le commentaire de Corral sur la réponse de Ryan Atkinson m'a permis de comprendre le problème.
J'ai eu tous mes fichiers de classe compilés dans target/classes
, qui ne sont pas des paquets dans mon cas. J'essayais de le conditionner avec jar cvfe App.jar target/classes App
, à partir du répertoire racine de mon projet, car ma classe App était dans le package par défaut non nommé.
Cela ne fonctionne pas, car le App.jar
nouvellement créé aura la classe App.class
dans le répertoire target/classes
. Si vous essayez d'exécuter ce fichier jar avec Java -jar App.jar
, il se plaindra de ne pas trouver la classe App
. Cela est dû au fait que les packages contenus dans App.jar
ne correspondent pas aux packages réels du projet.
Cela pourrait être résolu en créant le fichier jar directement à partir du répertoire target/classes
, en utilisant jar cvfe App.jar . App
. C'est assez lourd à mon avis.
La solution simple consiste à répertorier les dossiers que vous souhaitez ajouter avec l'option -C
au lieu d'utiliser la méthode par défaut de listage des dossiers. Donc, dans mon cas, la commande correcte est Java cvfe App.jar App -C target/classes .
. Cela ajoutera directement tous les fichiers du répertoire target/classes
à la racine de App.jar
, résolvant ainsi le problème.
J'ai reçu le même message d'erreur après le transfert du fichier jar par FTP et j'ai oublié de le définir en mode binaire.
J'ai eu cette erreur parce que j'ai écrit un mauvais Class-Path dans mon MANIFEST.MF