2015-10-09 12 views
7

Lavoro su un progetto Java di grandi dimensioni. Usiamo Maven come nostro strumento di costruzione e io uso Intellij (14) come IDE.Come monitorare e registrare il tempo di compilazione (compilazione/test)?

Attualmente, se costruisco l'intero progetto (circa 15 moduli) ci vogliono circa 3 minuti. A causa del modo in cui usiamo il nostro codice (anche in fase di sviluppo), finisco spesso per eseguire una compilazione completa. Sulla base del fatto che "ciò che viene misurato viene gestito", mi piacerebbe essere in grado di monitorare/registrare:

  1. Quante volte è stata eseguita una generazione/ora?
  2. Quanto tempo è stato dedicato all'esecuzione di build?
  3. Se fosse possibile, per rompere questo giù dal compito Maven - cioè pulito/compilazione/test/altri plugin, ecc

Un approccio potrebbe essere quello di avere l'output Maven scaricati in file, e poi hanno un processo per leggere questi/calcolare le statistiche che voglio. Come dovrei avvicinarmi a questo?

Giusto per essere chiari, non sto chiedendo commenti/consigli su come ridurre il nostro runtime del ciclo di generazione. Abbiamo già svolto un bel po 'di lavoro su questo aspetto e stiamo continuando a lavorarci su, anzi, sto davvero cercando un modo per monitorare i nostri progressi effettivi su questo.

+3

se sei in una squadra che usa un sistema di controllo del codice sorgente, pensa di automatizzare i tuoi cicli di costruzione e usa qualcosa come [Jenkins] (https://jenkins-ci.org/) .. avresti avuto abbastanza pulito panoramiche su build-time, error-tracking e quant'altro? –

+0

@definitamente - Grazie - questo è un suggerimento utile per monitorare i tempi di costruzione da un giorno all'altro nel tempo e, si spera, in un ambiente coerente. Tuttavia, ciò non tiene conto della frequenza con cui sto costruendo il progetto (o sottomoduli) nel mio lavoro di sviluppo quotidiano. Mi piacerebbe davvero essere in grado (obiettivamente) di dire che ho speso x minuti (o ore!) A fare build ogni giorno. (Ciò fornirebbe munizioni per argomentare a dedicare tempo a ridurre i tempi di costruzione ...) – amaidment

+1

In Windows, [Performance Monitor] (https://technet.microsoft.com/en-us/magazine/2008.08.pulse.aspx#id0120047) dovrebbe essere in grado di raccogliere statistiche sulla durata di determinati processi. Potresti configurare dei contatori perfmon per i tuoi eseguibili di build/compile/test? –

risposta

1

This Il progetto Maven Profile potrebbe aiutarti.

semplice installazione (copia) il suo vaso latest versione sui vostri $ {M2_HOME}/lib/ext e quindi l'esecuzione la build come segue

mvn clean install -Dmaven.profile 

avrebbe fornito il seguente output di esempio

com.sample:test:0.0.1-SNAPSHOT 

    clean 175ms 
    org.apache.maven.plugins:maven-clean-plugin:2.5 (default-clean) 175ms 

    process-resources 336ms 
    org.apache.maven.plugins:maven-resources-plugin:2.6 (default-resources) 335ms 

    compile 1s 2ms 
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1 (default-compile) 1s 2ms 

    process-test-resources 9ms 
    org.apache.maven.plugins:maven-resources-plugin:2.6 (default-testResources) 9ms 

    test-compile 59ms 
    org.apache.maven.plugins:maven-compiler-plugin:2.5.1 (default-testCompile) 59ms 

    test 1s 83ms 
    org.apache.maven.plugins:maven-surefire-plugin:2.12.4 (default-test) 1s 83ms 

    package 352ms 
    org.apache.maven.plugins:maven-jar-plugin:2.4 (default-jar) 352ms 

Dovresti quindi avere un ulteriore livello (script?) Per l'accumulo di dati al fine di ottenere le statistiche cross-build. Tuttavia, risponde già alla tua terza domanda ed è probabilmente un buon inizio.