@@ -22,7 +22,6 @@ import org.gradle.api.Project
22
22
import org.gradle.api.file.FileCollection
23
23
import org.gradle.api.file.SourceDirectorySet
24
24
import org.gradle.api.internal.ConventionTask
25
- import org.gradle.api.internal.HasConvention
26
25
import org.gradle.api.internal.file.FileResolver
27
26
import org.gradle.api.internal.file.collections.SimpleFileCollection
28
27
import org.gradle.api.internal.plugins.DslObject
@@ -54,59 +53,32 @@ class ClojurePlugin : Plugin<Project> {
54
53
55
54
override fun apply (project : Project ) {
56
55
logger.info(" Applying ClojurePlugin" )
57
- val javaBasePlugin = project.plugins.apply (JavaBasePlugin ::class .java)
56
+ project.plugins.apply (JavaBasePlugin ::class .java)
57
+ project.plugins.apply (JavaPlugin ::class .java)
58
+
58
59
val javaPluginConvention = project.convention.getPlugin(JavaPluginConvention ::class .java)
59
60
60
- project.plugins.apply (JavaPlugin ::class .java)
61
+ javaPluginConvention.sourceSets?.all { sourceSet ->
62
+ val compileTask = createClojureCompileTask(project, sourceSet)
61
63
62
- val mainSourceSet = javaPluginConvention.sourceSets?.getByName(SourceSet .MAIN_SOURCE_SET_NAME )
63
- if (mainSourceSet is HasConvention ) {
64
- val mainCompileTask = createCompileTask(project, mainSourceSet)
65
- val conventionMapping = mainCompileTask.conventionMapping
66
- conventionMapping.map(" classpath" , {
67
- mainSourceSet.compileClasspath
68
- .plus(SimpleFileCollection (mainSourceSet.allSource.srcDirs))
69
- })
70
- conventionMapping.map(" namespaces" , {
71
- mainCompileTask.findNamespaces()
72
- })
73
- }
74
64
75
- val testSourceSet = javaPluginConvention.sourceSets?.getByName(SourceSet .TEST_SOURCE_SET_NAME )
76
- if (testSourceSet is HasConvention ) {
77
- val testCompileTask = createCompileTask(project, testSourceSet)
78
-
79
- val mainSrcDirs = mainSourceSet?.allSource?.srcDirs ? : emptyList<File >()
80
- val testSrcDirs = testSourceSet.allSource.srcDirs
81
- val outputDirs = if (mainSourceSet != null )
82
- listOf (mainSourceSet.output.classesDir, testSourceSet.output.classesDir)
83
- else
84
- listOf (testSourceSet.output.classesDir)
85
-
86
- val compileMapping = testCompileTask.conventionMapping
87
- compileMapping.map(" classpath" , {
88
- testSourceSet.compileClasspath
89
- .plus(SimpleFileCollection (mainSrcDirs + testSrcDirs + outputDirs))
90
- })
91
- compileMapping.map(" namespaces" , {
92
- testCompileTask.findNamespaces()
93
- })
94
-
95
- val testTask = createTestTask(project)
96
-
97
- val testRunnerMapping = testTask.conventionMapping
98
- testRunnerMapping.map(" classpath" , {
99
- testSourceSet.runtimeClasspath.plus(SimpleFileCollection (mainSrcDirs + testSrcDirs + outputDirs))
100
- })
101
- testRunnerMapping.map(" namespaces" , {
102
- testCompileTask.findNamespaces()
103
- })
104
-
105
- testTask.dependsOn(testCompileTask.name)
65
+ if (sourceSet.name == SourceSet .TEST_SOURCE_SET_NAME ) {
66
+ val testTask = createTestTask(project)
67
+
68
+ val testTaskMapping = testTask.conventionMapping
69
+ testTaskMapping.map(" classpath" , {
70
+ sourceSet.runtimeClasspath.plus(compileTask.outputs.files)
71
+ })
72
+ testTaskMapping.map(" namespaces" , {
73
+ compileTask.findNamespaces()
74
+ })
75
+
76
+ testTask.dependsOn(compileTask.name)
77
+ }
106
78
}
107
79
}
108
80
109
- fun createCompileTask (project : Project , sourceSet : SourceSet ): ClojureCompiler {
81
+ fun createClojureCompileTask (project : Project , sourceSet : SourceSet ): ClojureCompile {
110
82
val projectInternal = project as ProjectInternal
111
83
val sourceRootDir: String = " src/${sourceSet.name} /clojure"
112
84
@@ -124,26 +96,32 @@ class ClojurePlugin : Plugin<Project> {
124
96
sourceSet.resources?.filter?.exclude { clojureDirSet.contains(it.file) }
125
97
126
98
val name = sourceSet.getCompileTaskName(" clojure" )
127
- val compilerClass = ClojureCompiler ::class .java
128
- logger.info(" Creating Clojure compile task $name with class $compilerClass " )
129
- val compile = project.tasks.create(name, compilerClass )
130
- compile .description = " Compiles the $sourceSet Clojure code"
131
-
132
- val javaTask = project.tasks.findByName(sourceSet.compileJavaTaskName)
133
- if (javaTask != null ) {
134
- compile .dependsOn(javaTask .name)
99
+ val clojureCompileClass = ClojureCompile ::class .java
100
+ logger.info(" Creating Clojure compile task $name with class $clojureCompileClass " )
101
+ val clojureCompileTask = project.tasks.create(name, clojureCompileClass )
102
+ clojureCompileTask .description = " Compiles the $sourceSet Clojure code"
103
+
104
+ val javaCompileTask = project.tasks.findByName(sourceSet.compileJavaTaskName)
105
+ if (javaCompileTask != null ) {
106
+ clojureCompileTask .dependsOn(javaCompileTask .name)
135
107
}
136
108
137
- project.tasks.findByName(sourceSet.classesTaskName)?.dependsOn(compile .name)
109
+ project.tasks.findByName(sourceSet.classesTaskName)?.dependsOn(clojureCompileTask .name)
138
110
139
- val conventionMapping = compile.conventionMapping
111
+ val conventionMapping = clojureCompileTask.conventionMapping
112
+ conventionMapping.map(" classpath" , {
113
+ sourceSet.compileClasspath
114
+ })
115
+ conventionMapping.map(" namespaces" , {
116
+ clojureCompileTask.findNamespaces()
117
+ })
140
118
conventionMapping.map(" destinationDir" , {
141
119
sourceSet.output.classesDir
142
120
})
143
121
144
- compile .source(clojureDirSet)
122
+ clojureCompileTask .source(clojureDirSet)
145
123
146
- return compile
124
+ return clojureCompileTask
147
125
}
148
126
}
149
127
@@ -161,7 +139,6 @@ fun createTestTask(project: Project): ClojureTestRunner {
161
139
return testRunner
162
140
}
163
141
164
-
165
142
interface ClojureSourceSet {
166
143
fun getClojure (): SourceDirectorySet
167
144
fun clojure (configureClosure : Closure <Any ?>? ): ClojureSourceSet
@@ -178,14 +155,14 @@ open class ClojureSourceSetImpl(displayName: String?, resolver: FileResolver?) :
178
155
override fun getClojure (): SourceDirectorySet = clojure
179
156
180
157
override fun clojure (configureClosure : Closure <Any ?>? ): ClojureSourceSet {
181
- ApiFacade .configureByClosure(this , configureClosure)
158
+ ApiFacade .configureByClosure(clojure , configureClosure)
182
159
return this
183
160
}
184
161
}
185
162
186
163
class ReflectionWarnings (var enabled : Boolean , var projectOnly : Boolean , var asErrors : Boolean )
187
164
188
- open class ClojureCompiler @Inject constructor(val fileResolver : FileResolver ) :
165
+ open class ClojureCompile @Inject constructor(val fileResolver : FileResolver ) :
189
166
AbstractCompile (),
190
167
JavaForkOptions by DefaultJavaForkOptions (fileResolver) {
191
168
@@ -210,7 +187,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
210
187
}
211
188
212
189
override fun compile () {
213
- logger.info(" Starting ClojureCompiler task" )
190
+ logger.info(" Starting ClojureCompile task" )
191
+
192
+ destinationDir.deleteRecursively()
193
+ destinationDir.mkdirs()
214
194
215
195
if (copySourceToOutput ? : ! aotCompile) {
216
196
project.copy {
@@ -244,8 +224,6 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
244
224
" (System/exit 0)" )
245
225
.joinToString(" \n " )
246
226
247
- // println(script)
248
-
249
227
val stdout = object : LineProcessingOutputStream () {
250
228
override fun processLine (line : String ) {
251
229
System .out .print (line)
@@ -297,12 +275,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
297
275
out .write(" $script \n " )
298
276
}
299
277
300
- // println("Classpath: " + classpath.joinToString(", "))
301
-
302
278
val exec = JavaExecHandleBuilder (fileResolver)
303
279
copyTo(exec)
304
280
exec.main = " clojure.main"
305
- exec.classpath = classpath.plus( SimpleFileCollection (destinationDir ))
281
+ exec.classpath = classpath + SimpleFileCollection (getSourceRootsFiles( ))
306
282
exec.setArgs(listOf (" -i" , file.canonicalPath))
307
283
exec.defaultCharacterEncoding = " UTF8"
308
284
@@ -333,10 +309,8 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
333
309
}
334
310
335
311
val sources = getSource()
336
- // println("Sources: " + sources.joinToString(", "))
337
312
val roots = getSourceRoots()
338
- // println("Roots: " + roots.joinToString(", "))
339
- val namespaces = sources.map { findNamespace(it, roots) }.toList()
313
+ val namespaces = sources.map { findNamespace(it, roots) }
340
314
return namespaces
341
315
}
342
316
@@ -349,6 +323,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
349
323
return roots
350
324
}
351
325
326
+ private fun getSourceRootsFiles (): List <File > {
327
+ return getSourceRoots().map(::File )
328
+ }
329
+
352
330
companion object {
353
331
val CHAR_MAP = mapOf (' -' to " _" ,
354
332
' :' to " _COLON_" ,
@@ -444,8 +422,6 @@ open class ClojureTestRunner @Inject constructor(val fileResolver: FileResolver)
444
422
445
423
val script = " $testRunnerScript \n $runnerInvocation "
446
424
447
- // println(script)
448
-
449
425
executeScript(script)
450
426
}
451
427
@@ -457,8 +433,6 @@ open class ClojureTestRunner @Inject constructor(val fileResolver: FileResolver)
457
433
458
434
val classpath = conventionMapping.getConventionValue<FileCollection >(SimpleFileCollection (), " classpath" , false )
459
435
460
- // println("Classpath: " + classpath.joinToString(", "))
461
-
462
436
val exec = JavaExecHandleBuilder (fileResolver)
463
437
copyTo(exec)
464
438
exec.main = " clojure.main"
0 commit comments