Il mio team usa attualmente uno script Ant per eseguire vari programmi Java.
Si noti che non sto chiedendo di gestire il ciclo di build / deployment per il quale stiamo già utilizzando Maven (abbastanza felicemente).
Ad esempio, usiamo qualcosa di simile al seguente:
<path id="lib">
<fileset dir="path/to/lib" />
</path>
<path id="run" >
<path refid="lib" />
</path>
<target name="aJavaProgram" >
<java classname="path.to.AJavaProgam"
classpathref="run" fork="yes" failonerror="false" append="true" />
</target>
<target name="anotherJavaProgram" depends="aJavaProgram" >
<java classname="path.to.AnotherJavaProgam"
classpathref="run" fork="yes" failonerror="false" append="true" />
</target>
Inizialmente abbiamo scelto Ant per i seguenti motivi (o meglio non ho scelto Ant, era così quando sono entrato, ma penso che questi siano buoni motivi per scegliere):
- era un modo semplice per gestire le dipendenze (anche se ora le prendiamo da Maven)
- ci consente di costruire / mantenere facilmente le dipendenze tra particolari lavori
- possiamo distribuire lo script Ant e le librerie Java e facilmente eseguire determinati lavori, ad es.
- non dobbiamo preoccuparci di classpaths (configurati nello script Ant)
- non dobbiamo preoccuparci di costruire i jar con le classi principali specificate nel manifest
- possiamo usare Ant per creare / archiviare / gestire gli argomenti passati ai metodi main ()
- possiamo collegare questi script di formica ai nostri IDE ed eseguire i lavori da lì.
In generale, siamo stati molto contenti di questo.
Tuttavia, un problema crescente è ant-java-shutdown hook issue - questo significa che se uno di questi programmi Java fallisce ma non termina, terminare il processo Ant da cui è stato avviato non termina il processo Java - che poi deve essere fatto manualmente, ed è un vero bind.
Inoltre, sono consapevole di altri due (possibili) fattori:
- questo sta usando Ant in un modo un po 'insolito, che forse non è il modo in cui Ant è stato progettato per essere usato (o almeno, così mi sembra ...)?
- Non ne sono sicuro, ma sembra che sempre meno sviluppatori / team utilizzano Ant in questi giorni , con preferenza per altre tecnologie.
Quindi, per chiarire:
- Voglio un approccio flessibile per l'esecuzione di vari programmi Java
- l'approccio che stavamo usando era quello di farlo tramite gli script di Ant, ma questo aveva i seguenti problemi:
- terminare l'attività Ant non uccide il programma Java
- questo "sente" come Ant non è lo strumento giusto per il lavoro
- come possiamo soddisfare le esigenze sopra specificate?
- se non Ant, la soluzione non deve affrontare il problema dell'arresto di terminazione / spegnimento