Groovy y Maven

De ChuWiki

Veamos cómo configurar maven para que compile un proyecto con fuentes en java y groovy. Usaremos el plugin de maven GMavenPlus

Plugins de maven para groovy[editar]

Aquí vamos a usar GMavenPlus, pero hay otro plugin, el Groovy Eclipse Maven Plugin que también puede servir para lo mismo, es cuestión de gustos. También está GMaven, pero es una versión obsoleta de GMavenPlus.

Configuración del proyecto maven para groovy[editar]

El proyecto maven tendrá la estructura de directorios habitual, pero añadiremos los directorios src/main/groovy y src/test/groovy para nuestros fuentes groovy tanto de nuestro programa como para nuestros test. Podemos mezclar los fuentes java y groovy dentro de src/main/java y src/test/java, pero no es la solución elegante.

Configuración del plugin gmavenplus en el pom.xml[editar]

En el fichero pom.xml tendremos que poner la siguiente configuración de plugin

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>addSources</goal>
                            <goal>addTestSources</goal>
                            <goal>generateStubs</goal>
                            <goal>compile</goal>
                            <goal>testGenerateStubs</goal>
                            <goal>testCompile</goal>
                            <goal>removeStubs</goal>
                            <goal>removeTestStubs</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
            ...
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.10</version>
            <scope>compile</scope>
        </dependency>
        ...
    </dependencies>
    ...
</project>

En el executions del plugin tenemos que poner muchos goal. Veamos por encima el significado de ellos, porque no todos serían necesarios según cómo tengamos el proyecto.

  • addSources y addTestSources. Añaden los directorios src/main/groovy y src/test/groovy como directorios de fuentes de maven. Si mezclásemos nuestros fuentes groovy con los fuentes java en src/main/java y src/test/java, no harían falta estos dos goal.
  • generateStubs y testGenerateStubs. Crean stubs de nuestros fuentes groovy para que el compilador de java pueda usarlos y compilar las clases java que dependan de clases groovy. Sin estos stubs, el compilador java no sería capaz de utilizar las clases de groovy. Si nuestras clases java no usaran las clases groovy, posiblemente no hicieran falta estos dos goal (no lo he verificado). Estos goal deben ponerse delante de los goal de compile y testComple respectivamente.
  • removeStubs y removeTestStubs. Una vez compiladas las clases java, estos stubs sobran, por lo que los borramos. Si no se borraran, se meterían dentro del jar.

Como queremos que esto se haga antes que el compilado de java, es necesario colocar este plugin delante del plugin de compilado de java maven-compiler-plugin, y para asegurar eso, hay que poner explícitamente el maven-compiler-plugin en el pom.xml y ponerlo detrás del plugin gmavenplus-plugin.

Dependencias necesarias para groovy[editar]

Por supuesto, si usamos cosas propias de groovy en nuestro código groovy, y casi seguro que lo haremos, necesitamos poner la dependencia de groovy-all. Con esto queda todo listo, usando los goal típicos de maven como mvn package, se compilarán los fuentes java y groovy, se compilarán y ejecutarán los test de java y groovy y se generará el jar con los class de java y de groovy dentro.