Ragioni per sorgenti separate e alberi generati

2

Quali sono i motivi per mettere i file generati in un albero parallelo agli alberi dei sorgenti? Ad esempio, in Eclipse in genere scelgo di mettere le fonti su .../src e il compilatore ha generato file in .../classes . Mescolare entrambi in un singolo albero mi sembra sporco, tuttavia non riesco a trovare alcun vantaggio nella separazione :

  • In teoria, potrei fare il backup delle fonti più facilmente, ma non è vero. Sto usando git e ignorare tutti i file *.class ovunque è semplicemente banale. Con altri sistemi di controllo della versione dovrebbe essere anche molto facile.
  • Teoricamente, aiuta a trovare un dato file sorgente più velocemente, dato che l'albero non è inquinato dai file di classe. In realtà, raramente ne ho bisogno (l'IDE offre modi molto più veloci). Per osservare le classi sto usando la Vista Class, che riassume la struttura della directory.
  • In teoria, potrebbero esserci strumenti che lo richiedono, ma non ne sono a conoscenza.

Ci sono due svantaggi della separazione:

  • L'IDE copia tutti i file non java ("risorse") dall'albero di origine a quello generato. Se l'IDE non rileva una risorsa modificata, allora c'è una vecchia versione sul classpath (cioè, nell'albero generato) e mi troverò a gestire un programma che lavora con la vecchia versione ... questo potrebbe costare un bel molto tempo.
  • C'era una volta, ho bisogno di trovare il file di classe corrispondente a un dato file java (o viceversa), che richiede molto tempo.

Quindi quali sono i reali vantaggi della separazione?

Questa domanda non è specifica di Java (Eclipse). Tuttavia, in Java il problema di navigare in un albero parallelo è aggravato dal fatto che gli alberi tendono ad essere molto profondi (a causa della struttura delle directory che rispecchia la struttura del pacchetto e della convenzione di denominazione dei pacchetti a livello mondiale).

    
posta maaartinus 15.05.2011 - 17:15
fonte

3 risposte

1

È più facile eseguire il pacchettizzazione per l'implementazione e rendere più semplice la creazione di una build pulita, ma per lo più penso che sia solo perché i file di origine e di classe sono due cose diverse.

Inoltre, se ritieni che i file di classe java siano difficili da trovare, dovresti provare una lingua che non imponga tale gerarchia di directory a volte: -)

    
risposta data 15.05.2011 - 19:50
fonte
1

Mantiene le cose semplici

In genere vuoi separare le risorse derivate dalla tua fonte. Il codice compilato ( .class ) è chiaramente derivato, la documentazione basata su sorgente (Javadocs) rientra in questa categoria, così come le metriche del codice, i risultati dei test unitari, la generazione automatica dei siti e così via.

Tutte queste risorse derivate contribuiscono in qualche modo all'oggetto finale (la tua applicazione) ma certamente non sono codice sorgente. Di conseguenza, mescolare queste risorse derivate nell'albero sorgente è un po 'strano. Certo, puoi filtrarli, ma perché preoccuparsi? Perché non avere semplicemente un posto a parte per metterli che puoi pulire con una semplice eliminazione di directory e avere la certezza assoluta che non è stato perso nulla .

E così nasce la directory / target (o /build o qualsiasi altra cosa).

    
risposta data 16.05.2011 - 10:55
fonte
0

Mi affido a grep & amici molto per rispondere alle domande sulle fonti di un progetto, e con i binari co-individuati devi sempre escluderli (fastidiosi) o ignorare le corrispondenze spurie in loro (anche fastidiose e inefficienti da avviare).

    
risposta data 15.05.2011 - 21:14
fonte

Leggi altre domande sui tag