2013-03-07 18 views
8

Ho avuto un momento difficile scrivere il titolo a questa domanda, ma qui è la mia situazione e che cosa sto chiedendo:I file java. Class sono necessari dopo l'esecuzione di un'applicazione?

  • Ho un progetto Java che ho eseguito "test formica", a eseguire i test
  • I test impiegano circa 10 minuti per l'esecuzione
  • Posso passare a un altro ramo Git durante l'esecuzione di questi test senza conseguenze?
  • Voglio che i test si completino rispetto al codice originale e mi consenta di lavorare semplicemente su un ramo diverso mentre ciò accade.

Immagino che la radice della mia domanda sia: Sono necessari file .class dopo aver caricato ed eseguito l'applicazione? Le classi sono appena memorizzate e non ho più bisogno dei file sul file system? O ancora accede/legge cose sul filesystem?

Qualsiasi comprensione o migliore comprensione di ciò che serve Java per un'applicazione in esecuzione è apprezzata.

risposta

6

Le classi vengono caricate su richiesta. Il classloader non tenterà di caricare una classe fino a quando quella classe non sarà stata referenziata. Pertanto, la rimozione dei file di classe dal classpath nel corso di una corsa causerebbe quasi certamente errori.

+0

Capito, quindi se in qualche modo sapessi che tutte le classi sono state caricate, probabilmente sarebbe ok, ma non c'è un buon modo per saperlo, quindi non è sicuro. Grazie –

3

Se non si compilano i file .java che si ricevono da Git nella stessa posizione mentre il test è in esecuzione, non si verificherà alcun problema con i file .class, indipendentemente dal modo in cui l'IDE carica il file. classi.

+1

* "A meno che non si compili i file .java" * nella stessa posizione mentre il test è in esecuzione .... Ma l'idea è valida;) – MadProgrammer

+0

Good point <;)> – ddmps

+0

Questo in realtà è utile. Il mio comando "ant test" viene compilato in una posizione diversa da quella del mio IDE, quindi posso effettivamente effettuare il checkout di un diverso ramo di file .java e non preoccuparmi dei test in esecuzione. La cartella dei file .class è ovviamente .gitignore'd, quindi probabilmente funzionerà senza problemi. Grazie! –

0

Nella JVM standard (intendo sun/oracle) una volta caricata una classe, rimane in memoria fino allo spegnimento della jvm, ma potrebbe non essere ancora caricata poiché le classi vengono caricate su richiesta.

0

Se tutti i file sono stati caricati nella memoria, non sarebbe necessario ... ma come assicurarsi che tutte le classi siano state caricate in memoria ... quindi avresti bisogno di file di classe nel classpath

0

Bene, penso che si debba fare un passo indietro e ripensare alla soluzione.

Hai scritto che esegui test di integrazione. E come parte del test stai cambiando le fonti, che sono testate. Se lo fai, produrrai dati di test inutili, perché non puoi essere sicuro, ciò che è stato veramente eseguito.

Se si desidera testare due diverse versioni/rami del software, è sufficiente abilitare due esecuzioni di test e confrontare i risultati.

È possibile essere certi che un file * .class sia caricato, se è stato utilizzato. Dopo aver caricato il file di classe, rimane nella memoria di JVM. Forse verrà scaricato se non viene utilizzato per un po 'di tempo e lo spazio GEM si sta esaurendo (ma non credo).

+0

Grazie per la risposta. Non sto provando a testare entrambi i rami contemporaneamente. Sto solo provando a testare un ramo e fare un lavoro su un altro. Voglio che i test si completino con il codice del ramo originale. –

+0

prova hudson o jekins. Effettua i test di integrazione non nel tuo spazio di lavoro. –

+0

Usiamo Bamboo, ma di solito cerco di eseguire i test prima di spingere, così so che non romperò la build per altri sviluppatori. –

Problemi correlati