Cosa c’è in un file Eclipse .classpath / .project?

Recentemente abbiamo riscontrato un problema con un progetto Eclipse per uno dei membri del nostro team. Tomcat non stava distribuendo JAR dell’applicazione.

Alla fine abbiamo notato che il file Eclipse .classpath non era lo stesso dei membri del team in cui il progetto era OK. Abbiamo sostituito il file .classpath con uno da un progetto che era OK e la distribuzione di Tomcat è stata completata.

Solo per curiosità e sapere cosa guardare in futuro se qualcosa non va, cosa c’è dentro i file .classpath e .classpath . Cosa posso aggiungere lì, cosa significa tutto ciò?

Eclipse è un ambiente di runtime per i plugin. Praticamente tutto ciò che vedi in Eclipse è il risultato di plugin installati su Eclipse, piuttosto che su Eclipse stesso.

Il file .project è gestito dalla piattaforma principale di Eclipse e il suo objective è descrivere il progetto da una vista Eclipse indipendente dal plugin. Qual è il nome del progetto? a quali altri progetti nello spazio di lavoro fa riferimento? Quali sono i costruttori che vengono utilizzati per build il progetto? (ricorda, il concetto di “build” non riguarda specificamente i progetti Java, ma anche altri tipi di progetti)

Il file .classpath è gestito dalla funzione JDT di Eclipse ( feature = set di plugins). JDT contiene più di questi “meta” file nel progetto (vedi la directory .settings all’interno del progetto); il file .classpath è solo uno di questi. In particolare, il file .classpath contiene le informazioni necessarie alla funzione JDT per compilare correttamente il progetto: le cartelle di origine del progetto (ovvero, cosa compilare); le cartelle di output (dove compilare a ); e voci del percorso di class (come altri progetti nello spazio di lavoro, file JAR arbitrari sul file system e così via).

Copiare alla cieca tali file da una macchina all’altra potrebbe essere rischioso. Ad esempio, se i file JAR arbitrari sono posizionati sul classpath (ovvero i file JAR che si trovano all’esterno dell’area di lavoro e sono assegnati al nome assoluto del percorso), il file .classpath viene reso non portatile e deve essere modificato in ordine essere portatile. Esistono alcune best practice che possono essere seguite per garantire la portabilità del file .classpath .

.project

Quando un progetto viene creato nell’area di lavoro, viene generato automaticamente un file di descrizione del progetto che descrive il progetto. L’unico scopo di questo file è di rendere il progetto auto-descrittivo, in modo che un progetto che è compresso o rilasciato su un server possa essere ricreato correttamente in un altro spazio di lavoro.

.classpath

Classpath specifica quali file di sorgenti Java e file di risorse in un progetto sono considerati dal costruttore Java e specifica come trovare i tipi all’esterno del progetto. Il builder Java compila i file di origine Java nella cartella di output e copia anche le risorse in esso.

Il riferimento completo non è disponibile per i file menzionati, in quanto sono estensibili da vari plug-in.

In sostanza, i file .project memorizzano le impostazioni del progetto, come le impostazioni di builder e di progetto, mentre i file .classpath definiscono il percorso di class da utilizzare durante l’esecuzione. I file classpath contengono le voci src e target che corrispondono alle cartelle nel progetto; le voci di conteggio vengono utilizzate per descrivere alcune voci “virtuali”, come le librerie JVM o in caso di dipendenze plug-in di Eclipse (le normali dipendenze del progetto Java vengono visualizzate in modo diverso, utilizzando una voce src speciale).

Questa documentazione di Eclipse contiene dettagli sui markup nel file .project : il file di descrizione del progetto

Descrive il file .project come:

Quando un progetto viene creato nell’area di lavoro, viene generato automaticamente un file di descrizione del progetto che descrive il progetto. Lo scopo di questo file è di rendere il progetto auto-descrittivo, in modo che un progetto che è compresso o rilasciato su un server possa essere ricreato correttamente in un altro spazio di lavoro. Questo file è sempre chiamato “.project”