JRuby è abbastanza maturo ora, ha prestazioni migliori rispetto al runtime ufficiale di Ruby (se scegli come target Ruby 1.8.x ; il ramo 1.9.x ha imposto molto, e rende le differenze di prestazioni tra i 2 meno rilevanti), e ti dà un accesso molto facile alle librerie Java.
Inoltre, se vuoi impacchettare i file WAR, suppongo che non sarebbe un problema utilizzare un contenitore / server abilitato a Java.
Quindi ti consiglio vivamente di dare un'occhiata più da vicino a JRuby.
E no, JRuby non "ha una JVM". Esegue in cima a una JVM . Quindi puoi sviluppare tutto il tuo progetto in JRuby, se lo desideri (o anche cifrarlo con Ruby e poi chiamare il tuo codice usando JRuby, anche se potresti incontrare alcune sorprese quindi ti consiglio di usare JRuby dall'inizio) e basta usare il Classi Java ogni volta che è necessario.
È abbastanza ben integrato, ha una comunità vivace e amichevole e produce aggiornamenti regolari all'implementazione.
Per quanto riguarda l'ambiente di costruzione, se usi JRuby sarai in grado di chiamare il compilatore da Ant facilmente (come qualsiasi altra cosa, davvero), quindi non sarebbe un problema. Potrebbero esserci anche alcune attività personalizzate già implementate, non conosco lo stato delle cose in quest'area.
Aneddoti su esperienze personali e altro: ho usato JRuby molto per implementare l'imbroglio di test automatizzato qualche anno fa (principalmente intorno al 2007) e non era nemmeno così maturo all'epoca, eppure era già a mio parere un'alternativa molto migliore rispetto all'implementazione ufficiale di Ruby. Inoltre è stato fantastico nel mio caso funzionare sulla JVM perché potevo anche usarlo per testare le classi Java. E sta migliorando costantemente nel tempo.
Il suo unico svantaggio è che, se lo si utilizza per sviluppare piccoli programmi o strumenti standalone, è necessario pacchettizzare la soluzione con una JVM o farla installare dall'utente, e che per i programmi di breve durata il costo di accensione una JVM (specialmente le versioni più vecchie, ora è abbastanza buona) potrebbe essere un trascinamento.
A parte questo, è stata un'ottima soluzione e scrivo ancora script su di esso occasionalmente.