Per Environment Configuration

Griffon supports the concept of per environment configuration. The BuildConfig.groovy file within the griffon-app/conf directory can take advantage of per environment configuration using the syntax provided by ConfigSlurper . As an example consider the following default packaging definitions provided by Griffon:

environments {
    development {
        signingkey {
            params {
                sigfile = 'GRIFFON'
                keystore = "${basedir}/griffon-app/conf/keys/devKeystore"
                alias = 'development'
                storepass = 'BadStorePassword'
                keypass   = 'BadKeyPassword'
                lazy      = true // only sign when unsigned
            }
        }

} test { griffon { jars { sign = false pack = false } } } production { signingkey { params { sigfile = 'GRIFFON' keystore = 'CHANGE ME' alias = 'CHANGE ME' lazy = false // sign, regardless of existing signatures } }

griffon { jars { sign = true pack = true destDir = "${basedir}/staging" } webstart { codebase = 'CHANGE ME' } } } }

griffon { jars { sign = false pack = false destDir = "${basedir}/staging" jarName = "${appName}.jar" } }

Notice how the common configuration is provided at the bottom level (it actually can be placed before the environments block too), the environments block specifies per environment settings for the jars property.

Packaging and Running for Different Environments

Griffon' command line has built in capabilities to execute any command within the context of a specific environment. The format is:

griffon [environment] [command name]

In addition, there are 3 preset environments known to Griffon: dev, prod, and test for development, production and test. For example to package an application for the development (avoiding jar signing by default) environment you could do:

griffon dev package

If you have other environments that you need to target you can pass a griffon.env variable to any command:

griffon -Dgriffon.env=UAT run-app

Programmatic Environment Detection

Within your code, such as in a Gant script or a bootstrap class you can detect the environment using the Environment class:

import griffon.util.Environment

...

switch(Environment.current) { case Environment.DEVELOPMENT: configureForDevelopment() break case Environment.PRODUCTION: configureForProduction() break }

Generic Per Environment Execution

You can use the griffon.util.Environment class to execute your own environment specific logic:

Environment.executeForCurrentEnvironment {
    production {
        // do something in production
    }
    development {
        // do something only in development
    }
}