Domanda

sto lavorando in una piccola squadra (3 persone) su diversi moduli (circa 10 al momento). La compilazione, l'integrazione e la gestione di versioni di build sta diventando sempre più noioso. Sto cercando uno strumento di buon costruire / integrazione di sostituire / completo Ant.

Ecco la descrizione del nostro ambiente di sviluppo in corso:  - diversi moduli a seconda di ogni più e sul JAR di terze parti  - Alcuni possono esportare VASI, alcune guerre di esportazione, un po 'standalone esportazione, VASI eseguibili (con Fat-Jar)  - Javadoc per tutti loro  - Noi lavoriamo con Eclipse  - script personalizzato Ant per ogni modulo. Molte informazioni ridondanti tra la configurazione Eclipse e script Ant. Ad esempio, per la versione autonoma di Fat-JAR, abbiamo elencato tutte le dipendenze ricorsive, mentre in posizione ideale, si poteva chiaramente essere importato dalla configurazione di Eclipse.  - Il codice sorgente è versionato utilizzando SVN

Ecco quello che vorrei un perfetto strumento di integrazione di fare per me:

  • automatizzare i rilasci e versioni di moduli. Idealmente, lo strumento di integrazione dovrebbe rilevare se è necessaria una nuova versione. Ad esempio, se voglio rilasciare un progetto A, che dipende da un progetto di B, e se ho fatto piccole modifiche sul progetto B a livello locale, quindi lo strumento di integrazione deve prima rilasciare una nuova versione di B come bene e fare una basata su esso.

  • Integrazione fortemente con Eclipse, in modo che potesse ottenere le dipendenze tra i moduli e le librerie di terze parti dalla sua configurazione. A proposito, mi piacerebbe continuare a configurare percorso di generazione con Eclipse senza aggiornare alcune altre cose ".xml". Ho visto che Gradle in grado di generare file di progetto Eclipse dalla sua configurazione, ma la controparte sarebbe grande.

  • Attiva uno sviluppo "dal vivo" e trasparente sui progetti locali. Voglio dire che spesso mi fanno piccole modifiche sui progetti comuni / fondamentali durante lo sviluppo dei principali progetti / "foglia". Vorrei avere le mie modifiche su progetti fondamentali immediatamente disponibili per progetti foglia senza la necessità di pubblicare (anche a livello locale) i vasetti di miei progetti fondamentali.

  • Conservare tutte le versioni dei rilasci di mio modulo su un server esterno. I più semplici (azioni cartella / WebDAV) sarebbe la migliore. Una bella pagina web con l'elenco dei moduli e manufatti consegnati sarebbe troppo grande.

Ho guardato intorno per molte cose. Da Ant4eclipse (per integrare la configurazione di Eclipse nel mio script Ant), agli strumenti Maven / Ivy / Gradle.

Sono un po 'confuso. Ecco quello che ho capito finora:  - Maven è un grande grande strumento /, ma è un po 'rigida e si obbliga a piegarsi alla sua struttura e concetti. Essa si basa sulla descrizione piuttosto che sullo scripting. Se si va fuori dal percorso, è necessario sviluppare voi propri plugin. - Ivy è meno potente di Maven, gestisce meno roba, ma è più flessibile. - Gradle è nel mezzo. Si tratta di uso generale. Permette scripting nonché configurazione "basata convenzione". Integra Ant e lo estende.

Quindi a questo punto Cerco testimonianze reali degli utenti reali. Quali strumenti usi ? Come ? Avete le stesse esigenze come me? Ha facilitare la vostra vita o di entrare nel modo?

Ci sono assaggiare alcuni casi d'uso, o scheletri delle aree di lavoro là fuori che potrei usare come punto di partenza per vedere ciò che questi strumenti sono in grado di?

Scusate per la lunghezza di questo messaggio. E grazie in anticipo per una consulenza.

Cordiali saluti,

Raphael

È stato utile?

Soluzione

  

Automatizzare le uscite e il controllo delle versioni dei moduli (...)

I concetti di controllo delle versioni e repository sono incorporati con Maven e potrebbero andare bene qui.

ISTANTANEA dipendenze . Quando si utilizza uno snapshot, Maven tenterà periodicamente di scaricare l'ultima snapshot disponibile da un repository quando si esegue una generazione. ISTANTANEA sono tipicamente utilizzati quando un progetto è in fase di sviluppo attivo.

Maven 2 supporta anche versione gamme (io in realtà non li consiglio, ma questa è un'altra storia), che consentono ad esempio di configurare una dipendere versione [4.0,) di B (qualsiasi versione superiore o uguale a 4,0). Se si crea e rilascia una nuova versione di B, A userebbe.

  

Integrazione fortemente con Eclipse

Il m2eclipse plugin fornisce la sincronizzazione bidirezionale con Eclipse.

  

Attiva uno sviluppo "dal vivo" e trasparente sui progetti locali.

Il plugin supporta m2eclipse "Risoluzione di lavoro": se il progetto Un progetto dipende da B e se il progetto B è nello spazio di lavoro, è possibile configurare un a dipendere da fonti B e non su B.jar (che è la modalità di default, se io 'm non è sbagliato). Quindi un cambiamento su fonti B sarebbe direttamente visibili, senza la necessità di costruire B.jar.

  

Conservare tutte le versioni dei rilasci di mio modulo su un server esterno.

Come accennato in precedenza, questo è in realtà un concetto centrale di Maven (che non hanno nemmeno la scelta) e la distribuzione attraverso il file: // o dav:. // sono entrambi supportati


In sintesi, Maven è (probabilmente) non è l'unico candidato, ma sono sicuro che si adatterebbe:

  • Il vostro progetto non è così esotica o complessa, non c'è nulla di spaventare dalla tua descrizione (alcuni refactoring della struttura sarà probabilmente necessario ma questo non dovrebbe essere un grosso problema).
  • Maven porta anche un flusso di lavoro basato sulle migliori pratiche.
  • m2eclipse fornisce forte integrazione con l'IDE.

Ma Maven ha qualche curva di apprendimento.

Altri suggerimenti

strumenti di CI? Per me, c'è solo una: Hudson CI .


Ho installato un ambiente di sviluppo software per Java una volta, con i componenti:

  • Eclipse IDE
  • Mercurial
  • Bugzilla
  • Maven
  • Nexus
  • Hudson CI

e alcuni Apache, MySQL, PHP, Perl, Python, .. per l'integrazione.

La Hudson non era integrato con Eclipse e che è stato di proposito, perché ho voluto costruire su un server separato. per tutti gli altri strumenti che ho avuto una perfetta integrazione croce (come: mylyn su Eclipse per parlare con Bugzilla, m2eclipse per l'utilizzo di Maven Eclipse, un sacco di plugin per Hudson, ...)

Abbiamo iniziando ad integrare Gradle nel nostro processo di generazione, e posso aggiungere alle risposte pubblicate già che Gradle potrebbe anche funzionare. I suoi presupposti sono per lo più corrette, Gradle è più a braccio, ma è potente e permette per lo scripting e tale all'interno della costruzione stessa. Sembra che la maggior parte delle cose Maven può fare, Gradle fa pure.

Ora, per i punti individuali:

Versioning : mappe supporti Gradle di dipendenza, versioning, e se si aggiunge in un server CI, è possibile attivare automatizzato / costruisce dipendente. Ad esempio, quasi tutti i nostri '' deliverable sono .wars, ma abbiamo diverse librerie di codice (.jars) e una .jar eseguibile in fase di sviluppo. Una configurazione è quello di rendere le guerre e il "grasso-jar" dipende dalle librerie di codice condiviso. Poi, quando le librerie condivise vengono aggiornati, sbattere le versioni sulle librerie condivise, testare i progetti che consumano, quindi usare l'abilità di Hudson al fuoco progetti dipendenti a ridistribuire quelle. Ci sono altri modi, ma che sembra funzionare meglio per noi, per ora.

Integrazione fortemente con Eclipse : Hai ragione, Gradle possono generare i file di Eclipse. Tendiamo di utilizzare solo l'eclipseCp (per aggiornamento .classpath) compito una volta che andare avanti, come solo le esigenze classpath cambiati. È un po 'eccentrico (afferra il vostro JRE di default, in modo da assicurarsi che sia giusto, non aggiunge esportato = "true" se ne avete bisogno), ma si ottiene il 99% della strada.

Attiva uno sviluppo "dal vivo" e trasparente sui progetti locali : Questo è quello che ho non sono sicuro. Ho messo solo circa Gradle in questo caso; rimuovendo il manufatto nel progetto che consumano e segnato il progetto condiviso come tale in eclissi, poi ritornato in seguito.

Memorizzare tutte le versioni dei rilasci di mio modulo su un server esterno :. Semplice e molti approcci sono supportati, simile a Maven

Per quanto riguarda esempi, la documentazione per Gradle sono buone, così come i progetti di esempio che vengono con il full zip. Otterranno installato e funzionante abbastanza rapidamente.

Date un'occhiata al Ant Ivy. http://ant.apache.org/ivy/

Non ci sono pallottole d'argento, ma nella mia esperienza Maven è un grande strumento di gestione del progetto. Personalmente, mi piace usare un comibnation di sovversione (per il controllo di versione), Maven (per il progetto / gestione build) e Hudson (per un funzionamento continuo build / integrazione).

Trovo la convenzione portata da Maven è veramente utile per la commutazione di contesto, e grande per la gestione delle dipendenze. Può essere frustrante se vasi non sono nei repository, ma è possibile installare in locale e quando si è pronti è possibile ospitare il proprio repository privata che specchi in altri luoghi. Ho avuto una buona esperienza con sonar.nexus da http://www.sonatype.com/ . Essi forniscono inoltre un excellenmt libro gratuito per iniziare.

Potrebbe sembrare eccessivo ora, ma la creazione di un / test / integrare l'ambiente buon costruire / release ora, pagherà dividendi in seguito. E 'sempre più difficile da retro-fit, ed è qualcosa che si può replicare con facilità.

Infine, mi capita di preferire l'integrazione Netbeans per Maven, ma che sono solo io:)

Alcuni dei tuoi argomenti sono parte della distribuzione e il rilascio di gestione.

si potrebbe verificare un prodotto come: Xebia DeployIt
(Con una edizione personale che è gratuito)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top