text: created a job with a simple println,
  started the app (grails run-app)
  saw the output,
  changed the println and saved.
  the output did not change.
  When the job class is reloaded, the bean factory, which created the scheduler is destroyed. This leads to the scheduler being shut down, which in turn prohibits (re-)scheduling jobs.
  This happens in QuartzGrailsPlugin.groovy:123:
  def onChange = { event ->
  ...
  event.ctx.registerBeanDefinition("${fullName}", beans.getBeanDefinition("${fullName}"))
  ...
  }
  The solution is to avoid these dependencies by delaying the registration of the job triggers. The attached patch registers the job triggers in doWithApplicationContext() instead of doWithSpring().
  Changed and newly created jobs are now created/updated correctly without the scheduler being shut down.
  One issue remains: If an existing job is deleted (e.g: rm grails-app/jobs/MyJob.groovy), the job will still be running.
  I Haven't investigated this issue properly, but I think this is rather a problem of the resource watcher. Maybe deleted resource events are not propagated to onChange()?