Mercurial > public > gradleplugins
diff src/main/groovy/org/ssdt_ohio/gradle/plugins/VersionClassPlugin.groovy @ 0:c51874d4a5a7
initial ssdt plugin
author | smith@nwoca.org |
---|---|
date | Fri, 18 May 2012 04:32:16 +0100 |
parents | |
children | 4db19f1c5ad0 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/groovy/org/ssdt_ohio/gradle/plugins/VersionClassPlugin.groovy Fri May 18 04:32:16 2012 +0100 @@ -0,0 +1,86 @@ +package org.ssdt_ohio.gradle.plugins + +import org.gradle.api.Project +import org.gradle.api.Plugin +import org.gradle.api.plugins.JavaPlugin +import java.util.Date +import org.gradle.api.plugins.GroovyPlugin; + +class VersionClassPlugin implements Plugin<Project> { + + def void apply(Project project) { + project.getPlugins().apply( GroovyPlugin.class ) + def genSrc = 'generated-src/version' + def generatedSrcDir = new File(project.buildDir, genSrc) + + def makeVersionClassTask = project.task('makeVersionClass') << { + + def now = new Date() + def targetPackage = getTargetClass(project) + + def outFile = new File(generatedSrcDir,targetPackage.replaceAll('\\.',"/") + "/ProjectVersion.groovy") + + outFile.getParentFile().mkdirs() + logger.info("creating $targetPackage in $outFile") + def f = new FileWriter(outFile) + f.write(""" +package $targetPackage +/** + * Generated by gradle build. + */ +public class ProjectVersion { + + public static final String NAME = "${project.name}" + public static final String GROUP = "${project.group}" + public static final String VERSION = "${project.version}" + public static final String DATE = "$now" + + public static String getDetailedVersion() { + "\$GROUP:\$NAME:\$VERSION \$DATE" + } + + public static String getID() { + "\$GROUP:\$NAME:\$VERSION" + } +} +""") + f.close() + } + + project.sourceSets { + main { + groovy { + srcDir project.buildDir.name+'/'+genSrc + } + } + } + + makeVersionClassTask.getInputs().files(project.sourceSets.main.getAllSource() ) + makeVersionClassTask.getOutputs().files(generatedSrcDir) + if (project.getBuildFile() != null && project.getBuildFile().exists()) { + makeVersionClassTask.getInputs().files(project.getBuildFile()) + } +// project.getTasks().getByName('compileGroovy').dependsOn('compileVersionGroovy') + project.getTasks().getByName('compileGroovy').dependsOn('makeVersionClass') +// project.getTasks().getByName('jar') { +// from project.sourceSets.version.output +// } + } + + + private getTargetClass(project) { + def source = project.sourceSets.main.groovy.getSrcDirTrees() + def files = project.sourceSets.main.groovy as File[] + def targetDir = files.first().parentFile.toString() + + def targetPackage = targetDir + source.each { + targetPackage -= it.getDir().getPath().toString() + } + targetPackage = targetPackage.replaceAll("\\\\",'.').replaceAll('/','.') + targetPackage = targetPackage.startsWith(".") ? targetPackage - "." : targetPackage + + return targetPackage + + } +} \ No newline at end of file