Improve registerMainClassTask implementation

Signed-off-by: Puneet Behl <behlp@objectcomputing.com>
diff --git a/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy
index 9ee898a..4610f5d 100644
--- a/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy
+++ b/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy
@@ -496,12 +496,19 @@
 
     protected void registerFindMainClassTask(Project project) {
         TaskContainer taskContainer = project.tasks
-        if (taskContainer.findByName("findMainClass") == null) {
-            def findMainClassTask = taskContainer.create("findMainClass", FindMainClassTask)
-            findMainClassTask.mustRunAfter taskContainer.withType(GroovyCompile)
-            taskContainer.withType(BootArchive) { BootArchive task ->
-                task.dependsOn findMainClassTask
-            }
+        def findMainClassTask = taskContainer.findByName("findMainClass")
+        if (findMainClassTask == null) {
+            findMainClassTask = project.tasks.register("findMainClass", FindMainClassTask).get()
+            findMainClassTask.mustRunAfter(project.tasks.withType(GroovyCompile))
+        } else if (!FindMainClassTask.class.isAssignableFrom(findMainClassTask.class)) {
+            def grailsFindMainClass = project.tasks.register("grailsFindMainClass", FindMainClassTask).get()
+            grailsFindMainClass.mustRunAfter(findMainClassTask)
+            findMainClassTask.dependsOn(grailsFindMainClass)
+        }
+
+        def bootRepackageTask = project.tasks.findByName("bootRepackage")
+        if (bootRepackageTask) {
+            bootRepackageTask.dependsOn findMainClassTask
         }
     }