Perché Maven è così lento rispetto all'automake?

4

Ho un progetto Maven composto da circa 100 moduli. Ho motivo di scomporre il progetto in così tanti moduli, e non credo che dovrei unirli per accelerare il processo di compilazione.

Ho letto molti progetti di altre persone, ad es. il progetto Maven stesso, e Apache Archiva e il progetto Hudson, sono tutti composti da molti moduli, quasi 100 forse, più o meno.

Il problema è che per costruirli tutti hanno bisogno di così tanto tempo, 3 ore per la prima volta (questo è accettabile perché molti artefatti da scaricare) e 15 minuti per la seconda build (questo non è accettabile).

Per automake, le cose sono allo stesso modo, la prima volta che devi configurare il progetto, per preparare il magico file config.h, è molto più complesso di ciò che fa Maven. Ma è ancora veloce, forse 10 secondi sul mio box Debian. Dopo di ciò, make install richiede forse 10 minuti per la prima volta. Tuttavia, quando tutto viene preparato, i file di oggetti .o vengono generati, non devono essere ricostruiti affatto per la seconda volta. (In Maven, tutto si ricostruisce in ogni momento.)

Mi sto chiedendo, come i ragazzi che lavorano per i progetti Maven possono scoprire questo lungo tempo per ogni build, non posso sedermi tranquillamente durante ogni creazione di Maven, ci è voluto troppo tempo, davvero.

    
posta Xiè Jìléi 01.03.2011 - 12:15
fonte

4 risposte

2

Quale parte della tua build di maven impiega più tempo? Potresti scoprire che javac è il collo di bottiglia principale. Forse è l'esecuzione del test unitario, prova a eseguire i test in parallelo. Senza ulteriori dettagli è davvero difficile dare una risposta utile. Quanto sono grandi i progetti?

Le build sono abbastanza parallelizzabili? Se si utilizza Maven 3 (o si passa ad esso, è compatibile al 99% con 2.x) è possibile eseguire build paralleli.

Penso che la tua colpa per il malvivente sia fuori luogo, per quanto riguarda le prestazioni, in realtà non aggiunge molto carico. Ho convertito diversi progetti di grandi dimensioni e ho visto aumentare notevolmente le build.

    
risposta data 01.03.2011 - 17:35
fonte
1

Questo confronto è significativo solo se stanno costruendo esattamente lo stesso progetto. In caso contrario, forse dovresti provare a creare un file Make per creare lo stesso progetto che stai creando con Maven.

    
risposta data 01.03.2011 - 16:36
fonte
0

Stai confrontando casi simili. IE sono i due che creano la stessa quantità di codice.

Se le build sono molto più lente in Maven, potrebbe esserlo, ma più probabile è il compilatore stesso. (Maven non compila nulla ma avvia il compilatore)

Per farlo andare più veloce, prova a vedere se c'è un modo per eseguire 2-4 thread contemporaneamente, non è sicuro come farlo in Maven ma in Make sarebbe 'make -j 4'. Dopo di che più ram aiuterà, così come un disco a stato solido.

    
risposta data 01.03.2011 - 15:58
fonte
0

Maven è una bestia complicata, molto più complicata del necessario per i miei gusti. Il problema chiave che stai vivendo sembra avere a che fare con la ricostruzione pulita ogni volta. I tuoi rilasci vuoi essere ricostruiti in modo pulito per assicurarti che sia il più sicuro possibile. Per le tue build di debug, devi semplicemente compilare ciò che è cambiato.

Il compilatore Java è abbastanza intelligente non per ricompilare qualcosa se il timestamp non è cambiato (simile a come funziona GCC). Molte volte, in una build Maven multi-modulo, è necessario creare TUTTE le dipendenze ogni volta. Questa pagina afferma che Maven non può rilevare quando non sono state apportate modifiche a un modulo .

La linea di fondo è che potresti avere un confronto più diretto tra ANT e Make / automake - ma non Maven. Maven ha troppi congegni auto-magici costruiti in cui hai solo un controllo limitato. Non può prendere le stesse decisioni informate che puoi sul tuo progetto perché sta cercando di risolvere il problema di costruzione per i progetti tutti . Maven è probabilmente più vicino a SCons o Boost Build . Anche se probabilmente troverai quei due molto più veloci da eseguire rispetto a Maven.

    
risposta data 01.03.2011 - 16:59
fonte

Leggi altre domande sui tag