@@ -22,7 +22,6 @@ import org.gradle.api.Project
2222import org.gradle.api.file.FileCollection
2323import org.gradle.api.file.SourceDirectorySet
2424import org.gradle.api.internal.ConventionTask
25- import org.gradle.api.internal.HasConvention
2625import org.gradle.api.internal.file.FileResolver
2726import org.gradle.api.internal.file.collections.SimpleFileCollection
2827import org.gradle.api.internal.plugins.DslObject
@@ -54,59 +53,32 @@ class ClojurePlugin : Plugin<Project> {
5453
5554 override fun apply (project : Project ) {
5655 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+
5859 val javaPluginConvention = project.convention.getPlugin(JavaPluginConvention ::class .java)
5960
60- project.plugins.apply (JavaPlugin ::class .java)
61+ javaPluginConvention.sourceSets?.all { sourceSet ->
62+ val compileTask = createClojureCompileTask(project, sourceSet)
6163
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- }
7464
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+ }
10678 }
10779 }
10880
109- fun createCompileTask (project : Project , sourceSet : SourceSet ): ClojureCompiler {
81+ fun createClojureCompileTask (project : Project , sourceSet : SourceSet ): ClojureCompile {
11082 val projectInternal = project as ProjectInternal
11183 val sourceRootDir: String = " src/${sourceSet.name} /clojure"
11284
@@ -124,26 +96,32 @@ class ClojurePlugin : Plugin<Project> {
12496 sourceSet.resources?.filter?.exclude { clojureDirSet.contains(it.file) }
12597
12698 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)
135107 }
136108
137- project.tasks.findByName(sourceSet.classesTaskName)?.dependsOn(compile .name)
109+ project.tasks.findByName(sourceSet.classesTaskName)?.dependsOn(clojureCompileTask .name)
138110
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+ })
140118 conventionMapping.map(" destinationDir" , {
141119 sourceSet.output.classesDir
142120 })
143121
144- compile .source(clojureDirSet)
122+ clojureCompileTask .source(clojureDirSet)
145123
146- return compile
124+ return clojureCompileTask
147125 }
148126}
149127
@@ -161,7 +139,6 @@ fun createTestTask(project: Project): ClojureTestRunner {
161139 return testRunner
162140}
163141
164-
165142interface ClojureSourceSet {
166143 fun getClojure (): SourceDirectorySet
167144 fun clojure (configureClosure : Closure <Any ?>? ): ClojureSourceSet
@@ -178,14 +155,14 @@ open class ClojureSourceSetImpl(displayName: String?, resolver: FileResolver?) :
178155 override fun getClojure (): SourceDirectorySet = clojure
179156
180157 override fun clojure (configureClosure : Closure <Any ?>? ): ClojureSourceSet {
181- ApiFacade .configureByClosure(this , configureClosure)
158+ ApiFacade .configureByClosure(clojure , configureClosure)
182159 return this
183160 }
184161}
185162
186163class ReflectionWarnings (var enabled : Boolean , var projectOnly : Boolean , var asErrors : Boolean )
187164
188- open class ClojureCompiler @Inject constructor(val fileResolver : FileResolver ) :
165+ open class ClojureCompile @Inject constructor(val fileResolver : FileResolver ) :
189166 AbstractCompile (),
190167 JavaForkOptions by DefaultJavaForkOptions (fileResolver) {
191168
@@ -210,7 +187,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
210187 }
211188
212189 override fun compile () {
213- logger.info(" Starting ClojureCompiler task" )
190+ logger.info(" Starting ClojureCompile task" )
191+
192+ destinationDir.deleteRecursively()
193+ destinationDir.mkdirs()
214194
215195 if (copySourceToOutput ? : ! aotCompile) {
216196 project.copy {
@@ -244,8 +224,6 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
244224 " (System/exit 0)" )
245225 .joinToString(" \n " )
246226
247- // println(script)
248-
249227 val stdout = object : LineProcessingOutputStream () {
250228 override fun processLine (line : String ) {
251229 System .out .print (line)
@@ -297,12 +275,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
297275 out .write(" $script \n " )
298276 }
299277
300- // println("Classpath: " + classpath.joinToString(", "))
301-
302278 val exec = JavaExecHandleBuilder (fileResolver)
303279 copyTo(exec)
304280 exec.main = " clojure.main"
305- exec.classpath = classpath.plus( SimpleFileCollection (destinationDir ))
281+ exec.classpath = classpath + SimpleFileCollection (getSourceRootsFiles( ))
306282 exec.setArgs(listOf (" -i" , file.canonicalPath))
307283 exec.defaultCharacterEncoding = " UTF8"
308284
@@ -333,10 +309,8 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
333309 }
334310
335311 val sources = getSource()
336- // println("Sources: " + sources.joinToString(", "))
337312 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) }
340314 return namespaces
341315 }
342316
@@ -349,6 +323,10 @@ open class ClojureCompiler @Inject constructor(val fileResolver: FileResolver) :
349323 return roots
350324 }
351325
326+ private fun getSourceRootsFiles (): List <File > {
327+ return getSourceRoots().map(::File )
328+ }
329+
352330 companion object {
353331 val CHAR_MAP = mapOf (' -' to " _" ,
354332 ' :' to " _COLON_" ,
@@ -444,8 +422,6 @@ open class ClojureTestRunner @Inject constructor(val fileResolver: FileResolver)
444422
445423 val script = " $testRunnerScript \n $runnerInvocation "
446424
447- // println(script)
448-
449425 executeScript(script)
450426 }
451427
@@ -457,8 +433,6 @@ open class ClojureTestRunner @Inject constructor(val fileResolver: FileResolver)
457433
458434 val classpath = conventionMapping.getConventionValue<FileCollection >(SimpleFileCollection (), " classpath" , false )
459435
460- // println("Classpath: " + classpath.joinToString(", "))
461-
462436 val exec = JavaExecHandleBuilder (fileResolver)
463437 copyTo(exec)
464438 exec.main = " clojure.main"
0 commit comments