Rene Groeschke wrote:
Am 21.08.2009 um 09:12 schrieb Hans Dockter:
On Jun 23, 2009, at 9:48 PM, Rene Groeschke wrote:
Hello list,
some weeks ago there was a discussion going on about notification
tasks that make use of twitter, growl, email etc. I've added a
notification plugin to my build, that actually uses Growl for
notifications. I rewrote the notification part in my build logic for
easy reuse. you can reuse it if you want. I've tested it with the
actual gradle trunk.
I've just created a git repo at github.com. have a deeper look at
http://github.com/breskeby/gradle-notify-plugin/tree/master .
Actually the growl implementation is hard coded in the notify
plugin. The notify implementation(s) should definitely be more
decoupled. The sources contains some dirty code fragments and
contain no tests yet :-(. I hope to find time to add other
notification implementations soon.
Comments, suggestions, ideas are appreciated!
So far I had unfortunately no time to give this a try. I hope we have
a plugin ecosystem infrastructure running within the next two months.
This would make it much easier to give new plugins a try and of
course to use non-core plugins in general.
I've just updated the code to work with 0.7. BTW. I reorganized my
github repos and moved this plugin to
http://github.com/breskeby/gradleplugins/tree/master
which is a fork of Gregory Boissinots "gradleplugins" repo.
Furthermore you can find an ExampleProject in src/samples for easy
testing. As you can see in the build.gradle of the ExampleProject it
is actually a lot of overhead to use a thirdparty plugin. I'm really
looking forward to that plugin ecosystem infrastructure you mentioned.
I count 15 lines of overhead. I think we can make some improvements
right now to simplify this, which don't need any infrastructure, and
which benefit other groups of people who share plugins (eg enterprise
plugins shared by multiple projects).
Let's have a look. The first chunk of overhead declares where to find
the artifacts:
import org.apache.ivy.plugins.resolver.*
buildscript {
repositories {
add(new URLResolver()) {
name = 'breskeby-Repo'
addArtifactPattern('http://breskeby.com/repo/[module](/[branch])/[type]s/[artifact]-[revision](-[classifier])(.[ext])')
}
}
}
A convenience method similar to flatDir() which takes an artifact
pattern would reduce this to:
buildscript {
repositories {
url(name: 'nnn', artifactPattern: 'http://....')
}
}
This also simplifies the build script for those builds which use a
shared repository to share artifacts between builds.
If we had a plugin repository somewhere, we could simplify this a little
more:
buildscript {
repositories {
gradlePlugins()
}
}
And if we made it the default buildscript repository (along with maven
central for the transitive dependencies), then this could disappear
altogether.
The other chunk of overhead declares the plugin to be used:
import com.breskeby.gradle.notification.NotificationPlugin;
usePlugin(com.breskeby.gradle.notification.NotificationPlugin)
buildscript {
...
dependencies {
classpath ":growl-api:0.1"
classpath ':growlPlugin:1.0'
}
}
I assume that 'growl-api' is actually a transitive dependency of
'growlPlugin', and should be moved to it's runtime configuration. We can
also get rid of the import statement, as the fully qualified classname
is passed to the usePlugin() method.
I think we could simplify this by moving the dependency declaration
closer to the usePlugin() statment, which I feel is a better place for
it, so as to keep related things together:
usePlugin(com.breskeby.gradle.notification.NotificationPlugin) {
classpath ':growlPlugin:1.0'
}
If we added some kind of discovery mechanism, this would simplify to
usePlugin('growl-notification') {
classpath ':growlPlugin:1.0'
}
In my opinion it is hard to say if notification should be part of the
gradle core. I guess the infrastructure for such notification tasks
(and maybe general implementations like email) should be core, but
implementations like this macos only growl notification shouldn't.
This is a good plan.
Adam
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email