Ho una situazione in cui alcuni dei miei codici groovy fanno riferimento ai miei file java, ma ho anche diversi file java che fanno riferimento allo stesso codice groovy. Quando provo a compilare in Maven, ho bisogno di compilare il groovy prima o dopo java, e questo non funzionerà perché il codice groovy dipende da alcuni file java, e diversi file java dipendono dal codice groovy. C'è un modo per gestire questo tipo di dipendenza?maven compile groovy
risposta
Dovresti riuscire a compilare il codice aggiungendo il plug-in gmaven a maven pom.xml. Genera stub Java del tuo codice groovy per gestire il tipo di riferimento inter-lingua con cui hai a che fare. Lo uso parecchio e funziona molto bene.
È possibile suddividere il codice in livelli e fare in modo che i livelli inferiori chiamino livelli superiori, ma mai viceversa. Ad esempio, in un'applicazione Web è possibile avere un livello di visualizzazione, un livello di servizio e un livello di persistenza. Il livello di vista chiama il livello di servizio e il livello di servizio chiama il livello di persistenza, ma il livello di persistenza non chiamerà mai il livello di servizio o il livello di vista. Se vuoi che il codice groovy/java esista nello stesso livello, assicurati di chiamare l'altro, ma non si chiamano entrambi. La linea di fondo è che si dovrebbero evitare le dipendenze bidirezionali.
Sì, utilizzare solo GMaven. Dato che si tratta di un compilatore congiunto, gestisce automaticamente il tuo java in groovy e groovy con le dipendenze java.
In breve, sarà necessario:
- includono la
gmaven-plugin
nella vostrapom.xml
; - mantieni le tue lezioni di groovy sotto
src/main/groovy
osrc/test/groovy
; - collega il plug-in gmaven alle fasi del ciclo di vita rilevanti.
Per ulteriori dettagli, vedere building groovy projects.
-1 C'è un compilatore congiunto Groovy-Java. –
È vero, ma se le dipendenze bidirezionali possono portare a codice inutilmente complesso e meno gestibile. Nel contesto di questa domanda concordo sul fatto che l'utilizzo di GMaven è la risposta giusta, ma vorrei comunque rifattorizzare il codice per eliminare o almeno ridurre le relazioni bidirezionali. – rich