Non sono molto chiaro con la domanda successiva dal libro SCJP (anche se ho letto la soluzione e la spiegazione ).
Considerare la seguente struttura di directory: –
foo --> test --> xcom --> A.class, B.java
Qui Foo, Test e Xcom sono directory. A.Class e B.Java sono i file nella directory XCOM.
Di seguito sono riportati i codici di origine dei file corrispondenti: –
A.java
package xcom;public class A { }
b.java
package xcom;public class B extends A { }
Il classpath predefinito è / foo.
ora , Per compilare B.Java, tengo la mia directory corrente come test e dare: –
Qui do il classpath come xcom che ha a caso. Ma ancora non trovi la classe A. Perché è così?
Risposte
2 per la risposta № 1
Se le classi sono nel pacchetto Xcom, il tuo classpath deve essere in la directory direttamente sopra. In questo caso, il classpath dovrebbe essere foo / test.
e se la directory corrente è foo / test, allora dovrebbe essere il tuo javac:
javac -classpath . xcom/B.java
0 per la risposta № 2
Poiché è necessario specificare la root del classpath per argomento, come javac -classpath . xcom/B.java
. Per compilare la classe B, il compilatore Java richiede classe A, prova a individuare il file di classe A in {classpathroot}/xcom/
.
Nota: .
– è una directory corrente
0 per la risposta № 3
Penso che la causa principale qui sia un malinteso di un “nome completo” in Java.
I nomi completi delle loro due classi sonxcom.a e xcom.b. La sua fonte è nei file A.java e B.Java in una directory chiamata Xcom; I nomi completi valutano la struttura della directory. Quando userete i file, per compilare o eseguirli, il classpath contiene una o più posizioni da dove puoi trovare nomi completi; Allora Java è alla ricerca di xcoma.java e xcomb.java (quando compilato) e xcoma.class e xcomb.class (quando eseguito).
Ecco perché ClassPath deve specificare la directory che contiene Xcom.
Mentre progredisci verso ambienti più complessi: il classpath può essere un elenco di tali posizioni; Ogni posizione è separata da un punto e virgola nelle finestre e due punti nei sistemi UNIX. Ogni posizione può essere una directory, come l’hai vista, ma può anche essere un file JAR. I file JAR sono in formato file ZIP e file ZIP hanno una struttura di directory e dischi. Pertanto, puoi comprimere i file di classe, mantenendo il padre Xcom (ma non i tuoi percorsi completi) e specificare il file JAR nel classPath invece di una directory.