diff --git a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy index 20c468e6cb..14a34f6817 100644 --- a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy +++ b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy @@ -163,6 +163,8 @@ class GrailsGradlePlugin extends GroovyPlugin { configureRunCommand(project) configurePathingJar(project) + + configureGroovyASTMetadata(project) } protected void excludeDependencies(Project project) { @@ -737,6 +739,48 @@ class GrailsGradlePlugin extends GroovyPlugin { } } + @CompileDynamic + protected void configureGroovyASTMetadata(Project project) { + def configScriptTask = project.tasks.create('configScript') + + def configFile = project.file("$project.buildDir/config.groovy") + configScriptTask.outputs.file(configFile) + + def projectName = project.name + def projectVersion = project.version + def projectDir = project.projectDir.absolutePath + def projectType = getGrailsProjectType() + def isPlugin = projectType == GrailsProjectType.PLUGIN + def grailsAppDir = new File(project.projectDir, grailsAppDir).absolutePath + configScriptTask.inputs.property('name', projectName) + configScriptTask.inputs.property('version', projectVersion) + configScriptTask.doLast { + configFile.parentFile.mkdirs() + configFile.text = """ +withConfig(configuration) { + inline(phase: 'CONVERSION') { source, context, classNode -> + source.ast.putNodeMetaData('GRAILS_APP_DIR', '$grailsAppDir') + source.ast.putNodeMetaData('PROJECT_DIR', '$projectDir') + source.ast.putNodeMetaData('PROJECT_NAME', '$projectName') + source.ast.putNodeMetaData('PROJECT_TYPE', '$projectType') + source.ast.putNodeMetaData('PROJECT_VERSION', '$projectVersion') + classNode.putNodeMetaData('projectVersion', '$projectVersion') + classNode.putNodeMetaData('projectName', '$projectName') + classNode.putNodeMetaData('isPlugin', '$isPlugin') + } +} +""" + } + project.tasks.getByName('compileGroovy').dependsOn(configScriptTask) + project.compileGroovy { + groovyOptions.configurationScript = configFile + } + } + + protected GrailsProjectType getGrailsProjectType() { + GrailsProjectType.NONE + } + protected FileCollection buildClasspath(Project project, Configuration... configurations) { SourceSet mainSourceSet = SourceSets.findMainSourceSet(project) SourceSetOutput output = mainSourceSet?.output @@ -749,4 +793,14 @@ class GrailsGradlePlugin extends GroovyPlugin { fileCollection } + enum GrailsProjectType { + NONE, + + WEB_APP, + + PLUGIN, + + PROFILE + } + } diff --git a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePlugin.groovy b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePlugin.groovy index d053f1a989..a77b3c0e7b 100644 --- a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePlugin.groovy +++ b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/core/GrailsPluginGradlePlugin.groovy @@ -65,8 +65,6 @@ class GrailsPluginGradlePlugin extends GrailsGradlePlugin { configureAstSources(project) - configureProjectNameAndVersionASTMetadata(project) - configurePluginResources(project) configurePluginJarTask(project) @@ -220,33 +218,9 @@ class GrailsPluginGradlePlugin extends GrailsGradlePlugin { } } - @CompileDynamic - protected void configureProjectNameAndVersionASTMetadata(Project project) { - def configScriptTask = project.tasks.create('configScript') - - def configFile = project.file("$project.buildDir/config.groovy") - configScriptTask.outputs.file(configFile) - - def projectName = project.name - def projectVersion = project.version - configScriptTask.inputs.property('name', projectName) - configScriptTask.inputs.property('version', projectVersion) - configScriptTask.doLast { - configFile.parentFile.mkdirs() - configFile.text = """ -withConfig(configuration) { - inline(phase: 'CONVERSION') { source, context, classNode -> - classNode.putNodeMetaData('projectVersion', '$projectVersion') - classNode.putNodeMetaData('projectName', '$projectName') - classNode.putNodeMetaData('isPlugin', 'true') - } -} -""" - } - project.tasks.getByName('compileGroovy').dependsOn(configScriptTask) - project.compileGroovy { - groovyOptions.configurationScript = configFile - } + @Override + protected GrailsProjectType getGrailsProjectType() { + GrailsProjectType.PLUGIN } protected void checkForConfigurationClash(Project project) { diff --git a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/web/GrailsWebGradlePlugin.groovy b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/web/GrailsWebGradlePlugin.groovy index e7d5fc65b8..22b0399bb8 100644 --- a/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/web/GrailsWebGradlePlugin.groovy +++ b/grails-gradle-plugin/src/main/groovy/org/grails/gradle/plugin/web/GrailsWebGradlePlugin.groovy @@ -1,5 +1,5 @@ /* - * Copyright 2015-2022 the original author or authors. + * Copyright 2015-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -59,4 +59,9 @@ class GrailsWebGradlePlugin extends GrailsGradlePlugin { } } + @Override + protected GrailsProjectType getGrailsProjectType() { + GrailsProjectType.WEB_APP + } + }