With Groovy we can configure the compiler for our source files just like we can configure the Groovy compilation unit when we use GroovyShell
to execute scripts. We can for example add annotations to source files, before they are compiled, without adding them to the actual source code ourselves. Suppose we want to apply the TypeChecked
or CompileStatic
AST transformation annotation to all source files in our project. We only have to write a configuration file and specify the name of the configuration file with the --configscript
option of the Groovy compiler. If we use Gradle to build our Groovy project we can also customise the GroovyCompile
task to set the configuration file.
The configuration file has an implicit object with the name configuration
of type CompilerConfiguration
. Also there is a builder syntax available via the CompilerCustomizationBuilder
class. Let's look at both ways to define our custom configuration. We want to add the CompileStatic
annotation to all classes, together with the ToString
AST transformation annotation. Next we also want to add the package java.time
as implicit import for our source files. This means we don't have to write an import
statement in our code to include classes from this package. Finally we add a ExpressionChecker
that will fail the compilation of our project if a variable name is only 1 character. We assume we use Gradle to build our project and we place the file groovycConfig.groovy
in the directory src/groovyCompile
. We must not name the file configuration.groovy
, because there is already a variable with the name configuration
in the script and this will confuse the compiler.
Continue reading →
Since Grails 3 Gradle is used as the build tool. The Grails shell and commands use Gradle to execute tasks. When we create a new Grails 3 application a Gradle wrapper is added to our project. The Gradle wrapper is used to download and use a specific Gradle version for a project. This version is also used by the Grails shell and commands. The default version (for Grails 3.0.12) is Gradle 2.3, which is also part of the Grails distribution. At the time of writing this blog post the latest Gradle version is 2.10. Sometimes we use Gradle plugins in our project that need a higher Gradle version, or we just want to use the latest version because of improvements in Gradle. We can change the Gradle version that needs to be used by Grails in different ways.
Grails will first look for an environment variable GRAILS_GRADLE_HOME
. It must be set to the location of a Gradle installation. If it is present is used as the Gradle version by Grails. In the following example we use this environment variable to force Grails to use Gradle 2.10:
Continue reading →
If our build script needs extra dependencies, for example when we add a plugin, then we use a buildscript
configuration block and define our dependencies in there. These dependencies are added to a configuration with the name classpath
. To see the dependencies and transitive dependencies for the classpath
configuration we use the task buildEnvironment
. This task is available since Gradle 2.10
Suppose we have the following build file where define the Asciidoctor plugin using the new plugins
configuration block. We also add a dependency for PDF generation in the buildscript
block:
Continue reading →
Interesting links for week 8 2016:
Continue reading →
When we write our Groovy application we of course add documentation to our classes. If we use Gradle to build our project we can run the groovydoc
task that is added by the Groovy plugin to generate documentation. We can set document and windows titles and a footer for the generated documentation by changing some properties of the groovydoc
task. If we want some further customisation we must take some extra steps. The groovydoc
task uses the GroovyDoc tool that is bundled with the Groovy library. GroovyDoc tool uses the GStringTemplateEngine to generate the documentation. The default template files are stored in the package org.codehaus.tools.groovydoc.gstringTemplates
. The following files are in the package:
└── org
└── codehaus
└── groovy
└── tools
└── groovydoc
└── gstringTemplates
├── classLevel
│ └── classDocName.html
├── packageLevel
│ ├── package-frame.html
│ └── package-summary.html
└── topLevel
├── allclasses-frame.html
├── deprecated-list.html
├── help-doc.html
├── index-all.html
├── index.html
├── overview-frame.html
├── overview-summary.html
└── stylesheet.css
Continue reading →