Written on
Groovy 2.1: groovyc --configscript
One of the new features in Groovy 2.1 [0] is the -configscript Groovy compiler program option.Compiler Configuration Script with --configscript
The --configscript option can be used to specify a compiler configuration script. Before 2.1, the CompilerConfiguration class could be used to change certain configuration settings:
def configuration = new CompilerConfiguration()
// apply some configuration settings ...
def shell = new GroovyShell(configuration)
import org.codehaus.groovy.control.customizers.ImportCustomizer
def imports = new ImportCustomizer()
imports.addImports('org.some.*')
configuration.addCompilationCustomizers(imports)
A New Builder: CompilerCustomizationBuilder
Groovy 2.1 comes even with a new DSL for the --configscript configuration file. The builder in the background is CompilerCustomizationBuilder. For the star import example given above, with the builder the configuration file would look like this:
import org.codehaus.groovy.control.customizers.ImportCustomizer
import org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder
CompilerCustomizationBuilder.withConfig(configuration) {
new ImportCustomizer().addImports('org.some.*')
}
// implicitly added ...
// import static org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder.*
import org.codehaus.groovy.control.customizers.ImportCustomizer
withConfig(configuration) {
new ImportCustomizer().addImports('org.some.*')
}
// implicitly added ...
// import static org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder.*
withConfig(configuration) {
ast(groovy.transform.CompileStatic)
}
withConfig(configuration) {
source(extension: 'sgroovy') {
ast(groovy.transform.CompileStatic)
}
}
registerFactory("ast", new ASTTransformationCustomizerFactory())
registerFactory("customizers", new CustomizersFactory())
registerFactory("imports", new ImportCustomizerFactory())
registerFactory("inline", new InlinedASTCustomizerFactory())
registerFactory("secureAst", new SecureASTCustomizerFactory())
registerFactory("source", new SourceAwareCustomizerFactory())
import org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder
def builder = new CompilerCustomizationBuilder()
builder.imports {
star 'org.some'
}