2010-08-26 5 views
1

Je suis nouveau à travailler avec Java à partir de la ligne de commande et je ne comprends pas. J'ai lu les questions CLASSPATH précédentes mais je n'ai toujours pas réussi à faire fonctionner mon problème.CLASSPATH 101 ... (sur Windows)

I ont la classe suivante dans C: \ Temp \ a \ b \ c

package a.b.c; 

public class Hello 
{ 
     public static void main(String args[]) 
     { 
      System.out.println("Hello World!"); 
     } 
} 

Le nom du paquet est intentionnel. Je l'ai compilé fin et je mets le fichier Hello.class dans C: \ Temp \ une cible \

maintenant dans la ligne de commande je vais à C: \ Temp \ et exécutez la commande suivante:

java -cp .\a\target a.b.c.Hello 

Il se plaint qu'il ne peut pas trouver la classe abcHello

Merci d'avance !!

+0

try java -cp a/target a.b.c.Hello – mhshams

Répondre

3

et je mets le fichier Hello.class dans C: \ Temp \ une cible \

Ceci est faux. Il doit être placé dans le même dossier que le fichier .java. Le code source lui-même est déclaré être dans le package a.b.c; alors le fichier .class devrait vraiment être conservé dans le dossier \a\b\c.

Ensuite, pour exécuter le faire:

C:\Temp>java -cp . a.b.c.Hello 
+0

Je le fais intentionnellement car les autres projets sur lesquels je travaille n'ont pas les fichiers de classe dans le même dossier que les fichiers sources. J'essaie d'apprendre de cet exemple simple pour les grands projets. – user431336

+0

Vous devez ensuite modifier la déclaration 'package' du code pour qu'elle corresponde à' a.target'. – BalusC

+0

Eh bien, pas nécessairement dans le * même * dossier, mais dans la même structure de dossiers. – OscarRyz

0

Évitez "mettre" les classfiles partout. Ce qui suit devrait fonctionner:

javac -d c:\temp c:\temp\a\b\c\Hello.java 
# creates Hello.class in c:\temp\a\b\c 
java -cp c:\temp a.b.c.Hello 
+0

Vous l'avez maintenant ... merci! – user431336

0

Java va essayer de rechercher une structure de répertoire a\b\c de démarrer en target et que vous remarquez, il ne fonctionnera pas.

Déplacer le répertoire entier dans target et vous serez bien, il devrait ressembler à:

C:\Temp\a\target\a\b\c\Hello.class 

Vous pouvez compiler avec l'option -d qui tall le compilateur où mettre le fichier de classe.

De nombreuses structures de projet sont comme ceci.

C:\whatever\projectname\src 
C:\whatever\projectname\classes 
C:\whatever\projectname\bin 
C:\whatever\projectname\lib 
C:\whatever\projectname\doc 

De cette façon, vous pouvez toujours l'étape de votre répertoire de projet et tapez:

javac -d classes src\*.java 

qui compilera toutes les sources dans le répertoire src et les placera dans le répertoire classes.

Ensuite, exécutez votre programme:

java -cp classes a.b.c.Hello 

Vous peut éventuellement placer des pots nécessaires dans lib

Cela fonctionne très bien pour les petits programmes (< 10 fichiers src et 2 - 3 bibliothèques jar) Si elle pousse Au-delà de cela, vous pourriez probablement utiliser un IDE ou ant

La bonne chose à propos de la suite de cette structure de projet est que certains IDES (comme idée de IntellJ) les choisissent très facilement lorsque vous créez un nouveau projet. Vous sélectionnez "Créer un projet à partir de sources existantes" et vous pouvez continuer à partir de là.

J'aime beaucoup compiler et éditer sur la ligne de commande!

+0

Ceci est très utile! Merci! – user431336

0

Pour développer le point de BalusC: le classpath définit une "racine". Lorsque java recherche vos classes, il commencera à chaque racine (ou jar) dans votre chemin de classe et explorera les répertoires pour faire correspondre le strucutre du paquet. Vous devez toujours avoir votre classe dans une structure de répertoire correspondant à son nom de package. Dans votre cas, pour exécuter

java -cp. \ Une cible \ abcHello

vous déplacez le fichier à

. \ Une cible \ \ a \ b \ c \ Hello.class

Il ya des années, j'ai aussi trouvé cela déroutant.

+0

Je l'ai maintenant ... Merci! – user431336