Mercurial > public > gradleplugins
view src/main/groovy/org/ssdt_ohio/gradle/plugins/VersionClassPlugin.groovy @ 31:bd084c7d01df version-0.4.6
Created version-0.4.6 branch
author | Kyle Miller <kyle.miller@mcoecn.org> |
---|---|
date | Fri, 05 Aug 2022 16:41:42 +0100 |
parents | bf31e9ad44cf |
children |
line wrap: on
line source
/* * Copyright (c) 2020. Ohio Department of Education. - All Rights Reserved. * Unauthorized copying of this file, in any medium, is strictly prohibited. * Written by the State Software Development Team (http://ssdt.oecn.k12.oh.us/) * */ package org.ssdt_ohio.gradle.plugins import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.ExtraPropertiesExtension.UnknownPropertyException 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') { doLast { def now = new Date().format('yyyy-MM-dd hh:mm:ss') def buildNumber = -1 if (project.rootProject?.file('build-number.txt').exists()) { def props = new Properties() project.rootProject?.file('build-number.txt').withInputStream {stream -> props.load(stream) } buildNumber = props['build.number'] } def targetPackage = getTargetClass(project) if (!targetPackage) { return } def outFile = new File(generatedSrcDir, "groovy/" + 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. $now ($buildNumber) * @version ${project.version} */ public class ProjectVersion { final String name = "${project.name}" final String group = "${project.group}" final String version = "${project.version}" final String buildDate = "$now" final int buildNumber = $buildNumber String getFullVersion() { "\$version \$buildDate (#\$buildNumber)" } String getId() { "\$group:\$name:\$version" } String toString() { "\$id \$buildDate (#\$buildNumber)" } } """) f.close() } } project.sourceSets { main { groovy { srcDir project.buildDir.name + '/' + genSrc + '/groovy' } } } makeVersionClassTask.getInputs().files(project.sourceSets.main.getAllSource().findAll{ !it.name.startsWith('ProjectVersion')} ) makeVersionClassTask.getOutputs().dir(project.buildDir.name + '/' + genSrc) if (project.getBuildFile() != null && project.getBuildFile().exists()) { makeVersionClassTask.getInputs().files(project.getBuildFile()) } project.getTasks().getByName('compileGroovy').dependsOn('makeVersionClass') } private getTargetClass(Project project) { try { return project.extensions.extraProperties.get('versionPackage') } catch (UnknownPropertyException ex) {} def source = project.sourceSets.main.groovy.getSrcDirTrees() def files = project.sourceSets.main.groovy if (!files || files.size() == 0) { return null } def targetDir = files.sort { it.parentFile.toString().replaceAll('(\\\\|/)','.').split(/\./).size() }.first().parentFile.toString() def targetPackage = targetDir source.each { targetPackage -= it.getDir().getPath().toString() } targetPackage = targetPackage.replaceAll("\\\\", '.').replaceAll('/', '.') targetPackage = targetPackage.startsWith(".") ? targetPackage - "." : targetPackage return targetPackage } }