...
- groovy-all 2.0.6
- slf4j-api 1.7.2
- slf4j-log4j12 1.7.2
- jcl-over-slf4j 1.7.2
- jul-to-slf4j 1.7.2
- org.springframework.beans 3.1.2.RELEASE
- org.springframework.context 3.1.2.RELEASE
- org.springframework.context.support 3.1.2.RELEASE
- org.springframework.core 3.1.2.RELEASE
Features
Buildtime
Developer Specific Configuration
There are two places where project specific configuration may be placed
| Code Block | ||
|---|---|---|
| ||
$USER_HOME/.griffon/settings.groovy
griffon-app/conf/BuildConfig.groovy |
The first is distribution wide (affects all projects) while the second is project specific. The first is never checked into SCM but the second may be. Where then, should a developer put specific configuration that only affects his or her environment without propagating those changes to the rest of the team? This is precisely the goal met by this feature, by reusing the global configuration file (settings.groovy) allowing a new configuration block where the keys are the name of the projects themselves, for example
| Code Block | ||
|---|---|---|
| ||
projects {
sample {
griffon.cli.verbose = true
}
'custom-app' {
griffon.'default'.artifact.repository = 'my-local'
}
} |
Runtime
I18N Aware Configuration
The application's runtime configuration is available through the config property of the application instance. This is a ConfigObject whose contents are obtained by merging Application.groovy and Config.groovy. Builder configuration is available through the builderConfig property and reflects the contents of Builder.groovy. Configuration files may also be provided as properties files; settings on the matching script will be overridden by those set in the properties file.
Configuration files are i18n aware which means you can append locale specific strings to a configuration file, for example Config_de_CH.groovy. Locale suffixes are resolved from least to most specific; for a locale with language = 'de', country = 'CH' and variant = 'Basel' the following files are loaded in order
- Config.groovy
- Config.properties
- Config_de.groovy
- Config_de.properties
- Config_de_CH.groovy
- Config_de_CH.properties
- Config_de_CH_Basel.groovy
- Config_de_CH_Basel.properties
By default the current Locale is used to determine values for language, country and variant; you can change this value by tweaking the application's locale.
I18N API
I18N support has been provided by the i18n plugin so far. Starting with this release the i18n API is now found in core. There's a new chapter in the Griffon Guide describing how messages can be configured and resolved.
Resource Management and Injection
Paired with I18N it's now possible to define resources that can be resolved and injected at boot time. For example
resources.properties
| Code Block | ||
|---|---|---|
| ||
sample.SampleModel.griffonLogo = /griffon-logo-48x48.png
logo = /griffon-logo-{0}x{0}.png |
SampleModel.groovy
| Code Block | ||
|---|---|---|
| ||
package sample
import griffon.core.resources.InjectedResource
import javax.swing.Icon
class SampleModel {
@InjectedResource Icon griffonLogo
@InjectedResource(key='logo', args=['16']) Icon smallGriffonLogo
@InjectedResource(key='logo', args=['64']) Icon largeGriffonLogo
} |
The Griffon Guide includes a new chapter that describes all configuration options.
Toolkit Agnostic Action Manager
The actions plugin provides a mechanism that can harvest Controller actions and create a matching toolkit action (Swing based) on the group's builder. This behavior has been extended to support UI toolkits other than Swing, starting with JavaFX. The Griffon Guide includes a full description on how to setup this feature, or disable it if the occasion calls for it.
Fixes
Buildtime
Griffon command execution failure in Linux Mint
Default settings found on Linux Mint prevented the Griffon command from working properly as it contained bash specific code for verifying the location of $JAVA_HOME. Octavian Nita contributed a patch that makes use or standard shell instructions to accomplish the same goal.
Runtime
EventRouter spins up non-daemon thread
EventRouter makes use of an internal thread to dispatch events asynchrounously. Unfortunately this thread was not set as a daemon thread which resulted in JavaFX applications not exiting as expected. The thread is now marked as a daemon one.
Compatibility
The following plugins are now obsolete:
- i18n
- i18n-support
- actions
...
New Commands
The following commands have been added
- list-templates: displays a list of all available templates that can be used in the current project.
- upload-release: uploads a release package to an artifact repository. This one differs from release as it expect the release package file to exist already, e.g. downloaded from a remote artifact repository.
- wrapper: creates or updates files required by the Griffon wrapper command.
Toolkit Aware Plugin Install
Griffon supports several UI toolkits for which many plugins may exist. Some of these plugins provide the same behavior but targeting a different UI toolkit, for example miglayout (swing) vs. miglayout-javafx (javafx). Now, every Griffon application has a default UI toolkit specified in its metadata; this fact makes it possible to simplify plugin installation by only specifying the common plugin name, that is, the following command
| Code Block | ||
|---|---|---|
| ||
griffon install-plugin miglayout |
will install miglayout-javafx if the application has javafx defined as its UI toolkit. On the other hand, it will install miglayout if the UI toolkit is swing.
Usage Tracking
An opt-in usage tracking system has been put into place in order to monitor the development of the Griffon community and help drive the roadmap for future features. There's no personal information being recorded; usage tracking can be disabled/enabled at any time. Verifying the current status of usage tracking is done by invoking this command
| Code Block | ||
|---|---|---|
| ||
griffon usage-stats |
Enabling or disabling usage tracking is done with
| Code Block | ||
|---|---|---|
| ||
griffon usage-stats --enabled=[true|false] |
Usage tracking is turned off automatically if running in offline mode.
IDE Support
DSL descriptors for both Intellij IDEA and Eclipse have been updated to their latest compatible syntax.
Runtime
Service LifeCycle
Services now have their own life-cycle methods, similarly to their MVC counterparts. See the section Service LifeCycle for more information.
Service Configuration DSL
Services properties may now be configured externally to the service class, using a simple DSL. Refer to the Service Configuration DSL section to learn more.
External Configuration
Applications now have the ability to specify alternate locations for configuration files and scripts. Simply configure griffon.config.locations in Config.groovy, for example
| Code Block | ||
|---|---|---|
| ||
griffon.config.locations = [
"classpath:${appName}-config.properties",
"classpath:${appName}-config.groovy",
"file:${userHome}/.griffon/${appName}-config.properties",
"file:${userHome}/.griffon/${appName}-config.groovy"] |
Section External Configuration Support covers this feature in more detail.
New Application Events
Instances managed by the application (such as MVC members) will now trigger a DestroyInstance event when the instance is no longer needed. This event is the counterpart of NewInstance.
Compatibility
The following plugins need to be updated to their latest versions
- dialogseclipse-support
- spring
- spock
Sample Applications
Griffon 1.12.0 ships with 8 sample applications of varying levels of complexity demonstrating various parts of the framework. In order of complexity they are:
...
To run the sample from source, change into the source directory and run griffon run-app from the command prompt.
Release Notes
1.
...
2.0
| JIRA Issues | ||
|---|---|---|
|