2010-03-14 12 views
31

Ho letto la documentazione Sun e molti post su Stack Overflow, ma sono ancora confuso sulle differenze tra le opzioni del compilatore Java -cp e -sourcepath.Differenze tra classpath e opzioni sourcepath di javac

Let dire che ho questa struttura di directory:

c:\Java\project1\src (where the Java source files are) 
c:\Java\project1\bin (where the Java class files will be or already are) 

Diciamo che anche io ho un file sorgente MainClass.java in un pacchetto com.mypackage, e che la struttura di directory è ok nella cartella di origine.

Sono nella directory progetto1 ed eseguire:

javac -d bin -sourcepath src src/com/mypackage/MainClass.java 

o

javac -d bin -classpath src src/com/mypackage/MainClass.java 

e ottenere lo stesso risultato. In modalità dettagliata, il percorso di ricerca per i file di origine è src in entrambi i casi.

Sarebbe bello se qualcuno potesse aiutarmi a capire le specifiche di queste opzioni.

risposta

21
-classpath classpath 

Impostare il percorso della classe utente, sovrascrivendo il percorso della classe utente nella variabile di ambiente CLASSPATH. Se non viene specificato né CLASSPATH né -classpath, il percorso della classe utente è costituito dalla directory corrente.

Se non viene specificata l'opzione -suotautente, il percorso della classe utente viene cercato per i file di origine e per i file di classe.

-sourcepath sourcepath 

Specificare il percorso del codice sorgente per la ricerca di definizioni di classe o di interfaccia. Come con il percorso della classe utente, le voci del percorso di origine sono separate da punti e virgola (;) e possono essere directory, archivi JAR o archivi ZIP. Se vengono utilizzati pacchetti, il nome del percorso locale all'interno della directory o dell'archivio deve riflettere il nome del pacchetto.

Si noti che le classi trovate tramite il percorso di classe sono soggette a ricompilazione automatica se vengono trovate le loro origini.

+2

Grazie per la risposta. L'ultima frase è ciò che stavo cercando: ricompilazione automatica dei file sorgente trovati nel cp. Ho verificato la data di modifica dei file .class nella directory bin e segue questo principio! Ecco la grande differenza tra le 2 opzioni. Anche il tempo di compilazione dà questo indizio. Grazie! – Alex

7
  • sourcepath è dove è la radice del codice per compilare
  • classpath può contenere il codice, ma anche le librerie è necessario
+0

Grazie per la risposta. – Alex

4

CLASSPATH dice al compilatore e il caricatore di classe dove cercare il . file di cui ha bisogno.

Sourcepath è qualcosa che non uso così tanto. Credo che sia facoltativo, perché di solito la directory corrente è l'accezione. CLASSPATH non lo è.

1
  • classpath viene cercato per la classe (.class) file
  • sourcepath viene cercato file di origine (.java) (.a.k.una classe o un'interfaccia definizioni)

Tuttavia, se sourcepath non è specificato, il classpath è cercato entrambi i file di classe e file di origine.

Questo mi porta a credere che possiamo quasi sempre mantenere le cose semplici usando solo classpath, ed evitando del tutto il sourcepath.

Le persone che devono utilizzare sia classpath che sourcepath probabilmente indirizzano contenuti di directory sconosciuti. Ad esempio, potrebbero avere una cartella che contiene i file di origine e i file di classe, ma desidera solo che i file di origine vengano cercati.