2012-12-10 2 views
0

je déconner avec classpaths etc. Et il y a quelque chose que je ne comprends pas tout à fait ...Pourquoi le classpath spécifié ne trouve pas la classe étendue?

Supposons que nous avons deux fichiers dans une structure de répertoire comme suit:

[current dir] 
| 
org 
| 
amigo 
| 
|---A.class 
|---B.java 

classe A :

package org.amigo; 
public class A {} 

classe B:

package org.amigo; 
public class B extends A {} 

jusqu'à présent, si g ood ... Maintenant, étant dans le current dir nous invoquons

javac org\amigo\B.java 

Cette compile la classe très bien. Ensuite, essayons

javac -cp . org\amigo\B.java 

Cela fonctionne aussi bien. Mais ... quand nous essayons de courir

javac -cp .:org org\amigo\B.java 

nous obtenons un:

cannot find symbol 
symbol: class A 
public class B extends A { 
        ^
1 error 

Soooooo .... ma question est - comment se fait cela ne fonctionne pas?

(Bien sûr, nous pourrions remplacer -cp .:org avec -cp .:[any dir] et toujours obtenir le même résultat.)

Si je comprends bien (dois-je? ... -_-) l'option -classpath, il nous laisse ARRIVE spécifions dans lequel répertoires pour rechercher la classe requise. Donc, si la classe A.class est présente dans un de ces répertoires, cela ne fonctionnera-t-il pas? Je veux dire - juste l'option -cp . a fonctionné!

Répondre

0

Sous Windows, le séparateur de chemin est ';'. Ainsi, au lieu de dire "regardez dans et org", vous indiquez explicitement que le chemin que la machine virtuelle doit chercher pour les classes est ".: Org", ce qui n'existe pas. Mais en même temps cela interdit à la machine virtuelle de regarder dans le répertoire courant, et donc elle ne trouve pas les classes.

+0

OMG, cloué ça :) merci – aMiGo

Questions connexes