Forme courte: si votre main se trouve dans un bocal, vous aurez probablement besoin d'un '-jar pathTo / yourJar / YourJarsName.jar' explicitement déclaré pour le faire fonctionner (même si 'YourJarsName.jar' était sur le chemin de classe) (ou , exprimé pour répondre à la question initiale posée il y a 5 ans: vous n'avez pas besoin de redéclarer chaque pot de manière explicite, mais il semble, même avec java6, vous devez redéclarer votre propre pot ...)
Forme longue: (J'ai rendu cela explicite au point que j'espère que même les intrus de Java pourront l'utiliser)
Comme beaucoup ici, j'utilise eclipse pour exporter des pots: (Fichier-> Exporter -> 'Fichier JAR exécutable'). Il existe trois options sur les offres d'éclipse (Juno) de «gestion des bibliothèques»:
opt1: "Extract required libraries into generated JAR"
opt2: "Package required libraries into generated JAR"
opt3: "Copy required libraries into a sub-folder next to the generated JAR"
En général, j'utilisais opt2 (et opt1 cassait définitivement), mais le code natif dans l'un des pots que j'utilise, j'ai découvert des ruptures avec l'astuce "jarinjar" pratique qu'éclipse utilise lorsque vous choisissez cette option. Même après avoir réalisé que j'avais besoin d'opt3, puis trouver cette entrée StackOverflow, il m'a fallu un certain temps pour comprendre comment lancer mon principal en dehors d'Eclipse, alors voici ce qui a fonctionné pour moi, car il est utile pour les autres ...
Si vous avez nommé votre jar: "fooBarTheJarFile.jar" et que tout est configuré pour être exporté dans le répertoire: "/ theFully / qualifiéPath / toYourChosenDir".
(ce qui signifie que le champ «Destination d'exportation» se lira: «/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar»)
Une fois que vous avez terminé, vous trouverez eclipse puis place toutes les bibliothèques dans un dossier nommé 'fooBarTheJarFile_lib' dans ce répertoire d'exportation, vous donnant quelque chose comme:
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar01.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar02.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar03.jar
/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/SomeOtherJar04.jar
Vous pouvez ensuite lancer depuis n'importe où sur votre système avec:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" -jar /theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(Pour les débutants Java: 'package.path_to.the_class_with.your_main' est le chemin de package déclaré que vous trouverez en haut du fichier 'TheClassWithYourMain.java' qui contient les 'main (String [] args) {.. .} 'que vous souhaitez exécuter depuis l'extérieur de java)
Le piège à remarquer: est que le fait d'avoir 'fooBarTheJarFile.jar' dans la liste des pots sur votre chemin de classe déclaré n'est pas suffisant. Vous devez déclarer explicitement '-jar' et redéclarer l'emplacement de ce pot.
par exemple, cela casse:
java -classpath "/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile.jar;/theFully/qualifiedPath/toYourChosenDir/fooBarTheJarFile_lib/*" somepackages.inside.yourJar.leadingToTheMain.TheClassWithYourMain
retraité avec des chemins relatifs:
cd /theFully/qualifiedPath/toYourChosenDir/;
BREAKS: java -cp "fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" package.path_to.the_class_with.your_main.TheClassWithYourMain
BREAKS: java -cp ".;fooBarTheJarFile_lib/*" -jar package.path_to.the_class_with.your_main.TheClassWithYourMain
WORKS: java -cp ".;fooBarTheJarFile_lib/*" -jar fooBarTheJarFile.jar package.path_to.the_class_with.your_main.TheClassWithYourMain
(en utilisant la version java "1.6.0_27"; via OpenJDK 64-Bit Server VM sur Ubuntu 12.04)