2009-06-09 7 views
9

Sono cresciuto deluso con le alternative basate su Groovy su Ant. AntBuilder non funziona da Eclipse, il plugin Groovy per Eclipse è deludente, e Gradle non è ancora pronto.Sostituzione di build.xml con Build.java - utilizzando Java e le librerie Ant come sistema di build

La documentazione di Ant ha una sezione intitolata "Uso di compiti di formica ant di Ant" che fornisce un teaser per l'utilizzo delle librerie Ant dal codice Java. C'è un altro esempio qui:

http://www.mail-archive.com/[email protected]/msg16310.html

In teoria sembra abbastanza semplice da sostituire con build.xml Build.java. La documentazione di Ant suggerisce alcune dipendenze non documentate che dovrò scoprire (non documentate dal punto di vista dell'uso di Ant da Java).

Dato il livello di delusione con lo scripting Ant, mi chiedo perché questo non sia stato fatto prima. Forse ha e non è un buon sistema di costruzione.

Qualcuno ha provato a scrivere file di compilazione in Java utilizzando le librerie Ant?

+0

Perché non consideri ancora Gradle pronto? – tronda

+0

+1 Sto pensando di fare anche questo. La camicia di forza della formica è stancante. – amarillion

+0

Per chiunque sia preoccupato di questo ... c'è una discussione più ampia con qualche informazione in più qui: http://ant.1045680.n5.nabble.com/Replacing-build-xml-with-Build-java-Doing-Ant- builds-directly-from-Java-td1354956.html – ricosrealm

risposta

7

Il nostro sistema di compilazione si basa principalmente su ciò che descrivi e funziona davvero molto bene. Utilizziamo le attività Ant (in particolare le attività di manipolazione dei file) da programmi java personalizzati che assemblano l'applicazione utilizzando il rilevamento automatico del layout del modulo dell'applicazione basato su convenzione.

È può bisogno di po 'di colla XML Formica, a fare le cose come compilare gli script di costruire se stessi, e per invocare in realtà il Java per eseguire il build, ma è minore.

java non solo è più leggibile di Ant, soprattutto quando si tratta di esecuzione condizionale, ma è molto più veloce. La nostra build basata su formica richiedeva circa un minuto per assemblare un EAR, ora la versione basata su Java dura circa 5 secondi.

+0

Sì , Potrei vedere dove usare un piccolo script Ant per costruire ed eseguire Build.java sarebbe conveniente. Potrei avere obiettivi diversi in build.xml per passare argomenti diversi a "java Build arg1 arg2 ..." corrispondente ai diversi target che avresti in un build.xml più grande Hai trovato dipendenze non documentate/impreviste quando si utilizza Ant da Java cioè che deve avere un Progetto con oggetti Target? –

+0

Sì, le attività Ant richiedono una certa quantità di impianti idraulici, ma sono facili da falsificare. Abbiamo finito per creare sottoclassi di ogni attività Ant che volevamo utilizzare, fornendo un'API più comoda e fluida per gli "script" di build da utilizzare e nascondendo i meccanismi di iniezione di cose come il Progetto. Niente che ci abbia causato problemi. – skaffman

+1

Sembra fantastico. Avete in programma di aprirlo o almeno fornire una panoramica di alto livello del vostro sistema di compilazione? –

0

Mentre suppongo sia possibile, probabilmente starai meglio con gli script di shell, quindi scrivendo un programma java completo per automatizzare semplicemente le build.

Si perderebbe uno degli usi chiave per ant, che sono i set di file facili da specificare e di facile lettura nelle proprietà.

Mi sono bloccato con la formica visto che Groovy è troppo vicino alla scrittura di un'intera applicazione per creare la tua vera applicazione. Troppo complicato per il disturbo.

+0

Talvolta i file build.xml di Ant diventano un sottoprogetto proprio. Le build possono essere complicate, troppo complicate per xml. –

2

Dato che Java è compilato, questo è un problema di pollo e uova. Devi costruire Build.java per costruire il tuo progetto.

Attualmente Ant supporta gli script in linea utilizzando BeanShell, Groovy e un gruppo di altri, che può davvero aiutare a ridurre la necessità.

MODIFICA: in risposta ai commenti multipli di Dean, se la tua build consiste in rigorosamente di una lunga procedura, allora in effetti non hai bisogno dello script di build della formica. Tuttavia, la potenza dello script di build è che garantisce che le dipendenze vengano eseguite una sola volta mentre consentono punti di ingresso multipli, qualcosa che è tutt'altro che banale se si esegue il rollover.

Se non ti piace il formato XML, non sei solo, l'autore di ANT è d'accordo con te. Tuttavia, se la tua vista del processo di compilazione è qualcosa che può essere lanciato dal tuo IDE come unico punto di lancio, direi che le tue esigenze di compilazione sono abbastanza semplici.

EDIT2: ho rispolverato la risposta di skaffman perché parla direttamente alla domanda. Nei commenti sembriamo essere d'accordo sul fatto che l'approccio va bene per una build procedurale, ma non funzionerebbe per uno dichiarativo, e che è necessario almeno un piccolo xml ANT per far girare la palla con il tuo Build.java per evitare il pollo e problema delle uova. Questo sembra arrivare al nocciolo della questione.

+0

Nessun problema di pollo e uova. Costruisci ed esegui Build.java da Eclipse o da qualsiasi IDE che usi. L'attività Ant

2

Hai avuto una buona idea.Cliff Click ha avuto un'idea simile: http://blogs.azulsystems.com/cliff/2008/01/i-hate-makefile.html

Se lo fai, ti consiglio di mantenerlo il più semplice possibile in modo che il tuo sistema di compilazione non abbia bisogno di un sistema di compilazione [non banale].

+0

Non ci dovrebbero essere più file Build.java di quanti file build.xml per un determinato progetto. Nella maggior parte dei casi un Build.java al livello più alto è tutto ciò che ci sarebbe. Il mio concetto è solo usando Ant da Java invece che da un file xml. –

+0

Il collegamento al blog di Cliff è interrotto, ma ho trovato un build.java di Cliff su github: https://github.com/edwardw/high-scale-java-lib/blob/master/build.java –

2

Un punto importante sembra essersi perso qui.

Ant è scritto in Java e quello che sto cercando è un modo migliore per usare le attività Ant (API nelle librerie Ant) piuttosto che tramite xml. Per la vita di me non riesco a capire come usare xml per invocare Java sarebbe sempre migliore o più semplice dell'uso di Java per invocare Java.

L'unico ostacolo è che l'approccio xml è documentato mentre l'approccio Java non è documentato, quindi dovrò scaricare e familiarizzare con il codice Ant.

Mi sono trattenuto dal postare questa domanda per un paio di settimane perché ero sicuro che qualcuno lo avesse fatto prima e che il mio google-foo avesse solo bisogno di essere migliorato. Mi sembra così ovvio usare Java per chiamare le API Ant invece che xml, ma sono comunque sorpreso che non sia stato sviluppato un approccio parallelo basato su Java per Ant e l'approccio xml.

Solo perché è ovvio, non significa che qualcuno lo abbia già fatto prima.

+0

Qualcuno lo ha già fatto prima. Si chiama Ant;) – GreenGiant