Exécuter le projet Eclipse à partir de la ligne de commande

J’ai deux problèmes en ce qui concerne la compilation et l’exécution d’un projet java Eclipse à partir de la ligne de commande. Cela fonctionne bien lorsque je cours juste à partir de l’IDE Eclipse. J’ai essayé de googler mais je ne pouvais pas vraiment faire fonctionner la chose. Toute aide est très appréciée.

Problème 1: Lorsque j’essaie de comstackr à partir d’un emplacement différent du répertoire où se trouve le fichier .java, le message d’erreur ” ne peut pas lire: myfile.java “. Mais si je migre vers ce répertoire, il se comstack.
La commande que je donnais est (quand dans un autre répertoire):
javac -cp C: \ ABC \ src \ XYZ monfichier.java
La commande que je donnais dans le répertoire XYZ:
javac monfichier.java
Cela a généré deux fichiers .class, myfile.class et Testing_Thread.class (je suppose que c’est parce que j’ai un thread dans mon code)

Problème 2: Après avoir compilé en allant dans son répertoire, lorsque j’essaie d’exécuter le programme, l’erreur ” Exception in thread” “java.lang.NoClassDefFoundError: myfile (nom incorrect: XYZ / myfile.java) ” même lorsque j’essaie de courir à partir du répertoire XYZ. Je reçois la même erreur lorsque j’essaie de courir d’un autre endroit également.
La commande que je donnais dans le répertoire XYZ:
java myfile
La commande que je donnais à un autre endroit:
java -cp C: \ ABC \ src \ XYZ myfile

J’attache également une hiérarchie de ma structure de répertoire si elle est d’une aide quelconque:
entrez la description de l'image ici

Ces exemples supposent la structure source suivante:

C:\temp\comstack-test\src\a\b\c\D.java 

Où D.java est:

 package abc; public class D { } 

Le premier problème, impossible à lire: myfile.java , est dû au fait qu’il n’est pas correct d’utiliser l’option de ligne de commande cp pour pointer vers votre code source.

 C:\temp\comstack-test\src>javac -cp c:\temp\comstack-test\src\a\b\c D.java javac: file not found: D.java Usage: javac   use -help for a list of possible options 

Cela devrait plutôt être le suivant, où javac est exécuté à partir de votre dossier source et où nous pouvons utiliser des chemins d’access relatifs aux fichiers source (NOTE – javac est exécuté à partir du dossier source ici):

 C:\temp\comstack-test\src>javac a\b\c\D.java 

Ou cela, où nous spécifions des chemins complets vers les fichiers source, et que javac peut être exécuté de n’importe où (NOTE – javac est exécuté à partir de C:\ ici):

 C:\>javac temp\comstack-test\src\a\b\c\D.java 

Les deux options ci-dessus entraîneront la création de vos fichiers de classe dans le même dossier que la source. C’est à dire:

 C:\temp\comstack-test\src\a\b\c\D.class 

Pour le deuxième problème, si vous essayez d’exécuter une classe dont le nom de paquet provient de ‘à l’intérieur’ du paquet, le nom sera incorrect (NOTE – java étant exécuté à partir de ‘l’intérieur’ du paquet ici):

 C:\temp\comstack-test\src\a\b\c>java D Exception in thread "main" java.lang.NoClassDefFoundError: D (wrong name: a/b/c/D) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: D. Program will exit. 

Pour exécuter la classe D , vous devez être à la racine du paquet et fournir le nom de classe entièrement qualifié . C’est à dire:

 C:\temp\comstack-test\src>java abcD Exception in thread "main" java.lang.NoSuchMethodError: main 

Notez que je reçois une exception car la classe D n’a pas de méthode principale et ne peut donc pas être exécutée. Pour résoudre ce problème, nous ajoutons une méthode principale:

 package abc; public class D { public static void main(Ssortingng[] args) { System.out.println("main"); } } 

et relancez:

 C:\temp\comstack-test\src>java abcD main