annotate src/main/groovy/org/ssdt_ohio/gradle/plugins/VersionClassPlugin.groovy @ 21:b14418c2ce40

set task output directory
author smith@nwoca.org
date Sun, 10 Jan 2016 16:43:54 +0000
parents 4ff2030d2074
children cfbdbeba877f
rev   line source
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
1 package org.ssdt_ohio.gradle.plugins
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
2
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
3 import org.gradle.api.Plugin
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
4 import org.gradle.api.Project
18
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
5 import org.gradle.api.plugins.ExtraPropertiesExtension.UnknownPropertyException
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
6 import org.gradle.api.plugins.GroovyPlugin
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
7
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
8 class VersionClassPlugin implements Plugin<Project> {
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
9
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
10 def void apply(Project project) {
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
11 project.getPlugins().apply(GroovyPlugin.class)
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
12 def genSrc = 'generated-src/version'
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
13 def generatedSrcDir = new File(project.buildDir, genSrc)
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
14
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
15 def makeVersionClassTask = project.task('makeVersionClass') << {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
16
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
17 def now = new Date().format('yyyy-MM-dd hh:mm:ss')
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
18
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
19 def buildNumber = -1
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
20 if (project.rootProject?.file('build-number.txt').exists()) {
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
21 def props = new Properties()
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
22 project.rootProject?.file('build-number.txt').withInputStream {stream ->
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
23 props.load(stream)
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
24 }
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
25 buildNumber = props['build.number']
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
26 }
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
27
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
28 def targetPackage = getTargetClass(project)
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
29
9
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
30 if (!targetPackage) {
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
31 return
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
32 }
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
33
3
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
34 def outFile = new File(generatedSrcDir, "groovy/" + targetPackage.replaceAll('\\.', "/") + "/ProjectVersion.groovy")
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
35
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
36 outFile.getParentFile().mkdirs()
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
37 logger.info("creating $targetPackage in $outFile")
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
38 def f = new FileWriter(outFile)
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
39 f.write("""
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
40 package $targetPackage
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
41 /**
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
42 * Generated by gradle build. $now ($buildNumber)
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
43 * @version ${project.version}
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
44 */
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
45 public class ProjectVersion {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
46
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
47 final String name = "${project.name}"
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
48 final String group = "${project.group}"
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
49 final String version = "${project.version}"
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
50 final String buildDate = "$now"
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
51 final int buildNumber = $buildNumber
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
52
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
53 String getFullVersion() {
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
54 "\$version \$buildDate (#\$buildNumber)"
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
55 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
56
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
57 String getId() {
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
58 "\$group:\$name:\$version"
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
59 }
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
60
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
61 String toString() {
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
62 "\$id \$buildDate (#\$buildNumber)"
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
63 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
64 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
65 """)
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
66 f.close()
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
67 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
68
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
69 project.sourceSets {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
70 main {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
71 groovy {
3
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
72 srcDir project.buildDir.name + '/' + genSrc + '/groovy'
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
73 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
74 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
75 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
76
3
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
77 makeVersionClassTask.getInputs().files(project.sourceSets.main.getAllSource().findAll{ !it.name.startsWith('ProjectVersion')}
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
78 )
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
79 makeVersionClassTask.getOutputs().file( project.buildDir.name + '/' + genSrc)
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
80
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
81 if (project.getBuildFile() != null && project.getBuildFile().exists()) {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
82 makeVersionClassTask.getInputs().files(project.getBuildFile())
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
83 }
3
1756755e4e71 improve up-to-date check so version does not cause recompile
smith@nwoca.org
parents: 2
diff changeset
84
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
85 project.getTasks().getByName('compileGroovy').dependsOn('makeVersionClass')
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
86
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
87
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
88 }
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
89
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
90
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
91
18
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
92 private getTargetClass(Project project) {
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
93 try {
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
94 return project.extensions.extraProperties.get('versionPackage')
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
95 } catch (UnknownPropertyException ex) {}
4ff2030d2074 USASR-1921: Update VersionClassPlugin to allow buildscript to specify package in which to generate ProjectVersion.groovy file
Christopher Springer <springer@nwoca.org>
parents: 9
diff changeset
96
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
97 def source = project.sourceSets.main.groovy.getSrcDirTrees()
9
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
98
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
99 def files = project.sourceSets.main.groovy as File[]
9
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
100 if (!files ) {
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
101 return null
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
102 }
9f9063d3c17c cope with subproject without src files
smith@nwoca.org
parents: 6
diff changeset
103
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
104 def targetDir = files.first().parentFile.toString()
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
105
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
106 def targetPackage = targetDir
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
107 source.each {
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
108 targetPackage -= it.getDir().getPath().toString()
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
109 }
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
110 targetPackage = targetPackage.replaceAll("\\\\", '.').replaceAll('/', '.')
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
111 targetPackage = targetPackage.startsWith(".") ? targetPackage - "." : targetPackage
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
112
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
113 return targetPackage
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
114
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
115 }
2
4db19f1c5ad0 create ProjectVersion as instance instead of static. Add build info to jar manifest
smith@nwoca.org
parents: 0
diff changeset
116
0
c51874d4a5a7 initial ssdt plugin
smith@nwoca.org
parents:
diff changeset
117 }