Qual è la differenza tra Class Path e Build Path


86

Sono confuso con questi due termini.

Inoltre cosa devo fare per creare un file nella cartella src di un progetto Spring MVC? Quando creo utilizzando un oggetto File, crea il file all'interno di C: \ SpringSourceTool ... Immagino che questo sia ClassPath giusto?

Come posso ottenere la applicationcontextcartella o la radice dell'applicazione qualunque?

Risposte:


101

Il percorso di compilazione viene utilizzato per creare la tua applicazione. Contiene tutti i file di origine e tutte le librerie Java necessarie per compilare l'applicazione.

Il classpath viene utilizzato per eseguire l'applicazione. Ciò include tutte le classi e le librerie java necessarie per eseguire l'applicazione java. Un Classpath è obbligatorio, il percorso predefinito .è quello utilizzato se la macchina virtuale java non riesce a trovare un percorso definito dall'utente. ( CLASSPATHvariabile d'ambiente, -cpflag o Class-Path:attributo in un manifest jar)


Ma javac accetta un argomento classpath. Si potrebbe dire che questo parametro "sovraccarico" per specificare il percorso di compilazione?
aioobe

4
No. L' argomento classpath è un suggerimento per il compilatore su cosa dovrebbe aspettarsi che sia disponibile / fornito in fase di esecuzione, dal momento che non costruisci ogni classe che usi da solo (ad esempio JFC, Librerie, ...). Il buildpath contiene sia le dipendenze sorgente che / o sorgente / compilato e dove cercarle.
Johannes Wachter

Durante lo sviluppo di un plugin ho aggiunto tutte le librerie necessarie al classpath, ma non ho potuto importare nulla. Eclipse non li ha visti finché non li ho aggiunti al percorso di creazione.
Bax

51

Il classpath è il modo convenzionale per indicare al compilatore Java (standard) e al runtime Java dove trovare le classi compilate. In genere è una sequenza di nomi di file JAR e nomi di directory. Il percorso di classe utilizzato dal compilatore e il sistema di runtime non devono essere gli stessi, ma in genere dovrebbero esserlo , soprattutto per un piccolo progetto.

Buildpath non è la terminologia Java standard. È il termine per il modo più ricco in cui un tipico IDE specifica la relazione tra i "progetti" che compongono un'applicazione. L'IDE usa questo per capire il classpath e il sourcepath per compilare il codice Java e il classpath per eseguirlo. L'IDE utilizza anche il percorso di compilazione per capire come impacchettare il codice e le sue dipendenze come (ad esempio) un file WAR.

Ad esempio, un percorso di compilazione Eclipse per un progetto include gli altri progetti da cui dipende ed elenca eventuali JAR di libreria aggiuntivi che il progetto contiene / fa affidamento. Elenca inoltre i pacchetti nel progetto corrente da cui possono dipendere i progetti a valle.

(Se stai usando Maven per il tuo progetto, il meccanismo di buildpath dell'IDE è secondario rispetto alle dipendenze dichiarate nei file POM. Ad esempio, usando Eclipse con m2eclipse, il buildpath è sintetizzato dai file POM.)


27

Il percorso della classe viene utilizzato in fase di esecuzione per caricare le classi e le risorse compilate.

Il percorso di compilazione viene utilizzato in fase di compilazione per trovare le dipendenze necessarie per creare il progetto.


Potresti dire che il percorso di classe viene utilizzato per individuare i .classfile (e altre risorse compilate), mentre il percorso di compilazione viene utilizzato per individuare i file di origine che devono essere compilati?
Adam,

1
@Adam Non penso che sia completamente vero. A volte il percorso di compilazione richiede file .class per compilare i file sorgente. Quindi il percorso di compilazione utilizza anche il percorso di classe dietro le quinte. Se impieghi un po 'di tempo a compilare ed eseguire un progetto java utilizzando java CLI, puoi vederlo. Il javac e il comando java hanno entrambi un'opzione classpath perché entrambi potrebbero averne bisogno.
intrepistar_88

4

Ogni progetto Java ha il proprio percorso di compilazione che specifica tutte le dipendenze richieste per compilare il progetto. Tali dipendenze possono provenire da altri progetti Java nell'area di lavoro, da file .jar dell'archivio Java o da cartelle contenenti file .class.

Nell'ambiente CLASSPATH devi specificare solo i file .class (cioè, jar, file zip - All'interno di jar, file zip troverai solo classi java) cioè stai aiutando Java Virtual Machine (JVM) a trovare i file di classe Java

Inoltre cosa devo fare per creare un file nella cartella src di un progetto Spring MVC? Quando creo utilizzando un oggetto File, crea il file all'interno di C: \ SpringSourceTool ...

È qui che è stata avviata la JVM, se si desidera creare il file altrove, utilizzare il percorso relativo da qui.

Vedi questo e questo per maggiori informazioni.


Non hai nemmeno menzionato il percorso di costruzione nella tua risposta.
aioobe

4

Vorrei aggiungere alla risposta di Andreas_D per spiegare che il percorso di compilazione è richiesto dall'IDE / compilatore per individuare i pacchetti esterni e le classi utilizzate dal codice. A volte ci riferiamo a questi come "dipendenze" .

NB: Questi pacchetti esterni possono essere impacchettati all'interno di un file .jar compresso o, in effetti, potrebbero esserci diversi file jar impacchettati all'interno di una "libreria" . Una biblioteca o un gruppo di biblioteche spesso costituisce una "struttura" .

Se il tuo codice richiede codice scritto da altri, puoi importarlo nella tua classe utilizzando il importcomando. Tuttavia, questo comando da solo è insufficiente in quanto il compilatore o l'IDE deve sapere dove si trovano quelle classi. Lo specifichi nel percorso di compilazione .

L' classpathaltra parte dice la JVM esegue l'applicazione dove trovare eventuali dipendenze durante l'esecuzione effettiva del codice.

Inoltre da notare: Classpath è per l'utilizzo da parte della JVM.

Buildpath è per l'uso da parte dell'IDE / compilatore ed è un mezzo per costruire il classpath dal proprio ambiente di sviluppo. Quando configuri il tuo buildpath tramite il tuo IDE, stai anche configurando un file nascosto nel tuo progetto chiamato .classpath. Viene utilizzato per fornire il classpath a JVM durante la distribuzione.


1

Classpath ( da Wikipedia ):

Simile al classico comportamento di caricamento dinamico, durante l'esecuzione di programmi Java, la Java Virtual Machine trova e carica le classi in modo pigro (carica il bytecode di una classe solo quando la classe viene utilizzata per la prima volta). Il classpath dice a Java dove cercare nel filesystem i file che definiscono queste classi.

La macchina virtuale cerca e carica le classi in questo ordine:

classi bootstrap: le classi fondamentali per la piattaforma Java (comprese le classi pubbliche della libreria di classi Java e le classi private necessarie per il funzionamento di questa libreria).

classi di estensione: pacchetti che si trovano nella directory di estensione di JRE o JDK,

jre / lib / ext / pacchetti e librerie definiti dall'utente

Per impostazione predefinita, solo i pacchetti dell'API standard JDK e dei pacchetti di estensione sono accessibili senza la necessità di impostare dove trovarli. Il percorso per tutti i pacchetti e le librerie definiti dall'utente deve essere impostato nella riga di comando (o nel Manifest associato al file Jar contenente le classi).

In poche parole: mentre il programma è in esecuzione, la JVM carica le classi solo se necessario. Quando è necessaria una classe, la JVM dipenderà dal classpath per sapere da dove caricare il bytecode (cioè: .classfile).

Il percorso di compilazione, d'altra parte, viene tipicamente utilizzato da un IDE, come Eclipse, per sapere dove cercare le librerie aggiuntive necessarie per compilare il codice sorgente di un progetto. Il percorso di compilazione non viene utilizzato durante il runtime.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.