On 10 Jul 2014, at 11:17 am, Luke Daley <luke.da...@gradleware.com> wrote:

> 
> 
> On 10 July 2014 at 11:13:22 am, Luke Daley (luke.da...@gradleware.com) wrote:
> 
>> 
>> 
>> On 9 July 2014 at 4:49:27 pm, Perryn Fowler (perryn.fow...@gradleware.com) 
>> wrote:
>> 
>>> 
>>> I did some investigation and I *think* I know whats going on with this 
>>> regression. If I'm right, the way it used to work is probably not 
>>> desireable anyway, so it would be good to discuss what to do about it...
>>> 
>>> What I think is going on:
>>> 
>>> GROOVY CLASSPATH INFERENCE
>>> The GroovyPlugin sets the classpath of the GroovyDoc task to the compile 
>>> classpath of the main sourceset
>>> The GroovyBasePlugin sets the groovyClasspath by using GroovyRuntime to 
>>> infer it from the (compile) classpath 
>>> The inference mechanism looks for a groovy jar on the classpath
>>> If it finds groovy-all.jar it just uses that jar.
>>> If it finds a different groovy jar it creates a new configuration and adds 
>>> the jar as a dependency (I am not sure what this achieves over just using 
>>> the jar)
>>> It would make more sense to me if it added a 'tool' version of the jar 
>>> instead (in fact the comments say it *does* do this)
>>> This behaviour seems to have been changed by Adam in commit 818e0b9
>>> I suspect this commit introduced the regression
>> 
>> Right, here’s the culprit: 
>> https://github.com/gradle/gradle/commit/818e0b9#diff-95e522b5be7746a11b2f9d31a2f29d9dL101
>> 
>>> HOWEVER...
>>> 
>>> The exception reported in the forums does not seem to occur when executing 
>>> the groovydoc tool itself, but when instantiating a gradle BasicAntBuilder 
>>> (in order to define and execute an ant groovydoc task)
>>> This is because BasicAntBuilder inherits from groovy.util.AntBuilder
>>> This is loaded by a classloader that by default has a classpath containing 
>>> classPathRegistry.getClassPath("GROOVY"), but this appears to be replaced 
>>> by AntGroovyDoc with the groovyClasspath from the GroovyDoc task
>>> This all leads me to suspect that this used to work (prior to Adam's 
>>> commit) by picking up groovy.util.AntBuilder from the users compile 
>>> configuration rather than from the gradle installation 
>>> That doesn't seem desireable...
>> 
>> We need to change GroovyRuntime to have another method that returns a 
>> classpath with the ant classes and wire that to the groovydoc task.
>> 
> 
> Just noticed that GroovyRuntime is public API (why?). This means we should 
> actually just revert the change to this method.
> 

Only when generating Javadoc. We don’t want to make groovy-ant visible at 
compilation time if it’s not declared as a dependency.


--
Adam Murdoch
Gradle Co-founder
http://www.gradle.org
CTO Gradleware Inc. - Gradle Training, Support, Consulting
http://www.gradleware.com



Reply via email to