On 27/03/2012, at 3:01 AM, Daz DeBoer wrote:

> This happened as part of my fix for 
> http://issues.gradle.org/browse/GRADLE-2189: we now include all dependency 
> jar files directly on the system classpath, rather than adding them to the 
> system classloader at a later time. However, to avoid command-line length 
> limits, we use a single empty jar with a manifest 'Class-Path' entry to 
> reference all of the jars.
> 
> Our ClasspathUtil does not handle jars added to the classpath in this way.
> 
> Some options are:
> 1. Programmatically add the jars to the classpath even if they are already 
> included in a classpath-only jar file. Jars will be added twice to the 
> classpath.
> 2. Set the 'java.class.path' system property to include the list of all jars 
> in the classpath. ClasspathUtil reads this property.
> 3. Fix ClasspathUtil so that it inspects the manifest of jar files and 
> includes any jars that are in the classpath via 'Class-Path' entries

3. Is the way to go, I think. One question is whether the 'Class-Path' entry is 
always honoured by URLClassLoader, or just by the system ClassLoader.

We should also note the change to the system class path for tests in the 
migration guide, for those who do similar class loader trickery.

> 
> Reverting my final commit will effectively do 1+2. I don't understand the 
> deeper implications of any of this, so I'm interested in feedback.
> cheers
> Daz
> 
> On 26 March 2012 04:45, Luke Daley <[email protected]> wrote:
> Anything that uses ProjectBuilder fails with:
> 
> java.lang.IllegalArgumentException: Cannot find JAR 'httpclient-4.1.2.jar' 
> required by module 'gradle-core-impl' using classpath.
>        at 
> org.gradle.api.internal.classpath.DefaultModuleRegistry.findDependencyJar(DefaultModuleRegistry.java:265)
>        at 
> org.gradle.api.internal.classpath.DefaultModuleRegistry.module(DefaultModuleRegistry.java:160)
>        at 
> org.gradle.api.internal.classpath.DefaultModuleRegistry.loadModule(DefaultModuleRegistry.java:147)
>        at 
> org.gradle.api.internal.classpath.DefaultModuleRegistry.getModule(DefaultModuleRegistry.java:125)
>        at 
> org.gradle.api.internal.DynamicModulesClassPathProvider.findClassPath(DynamicModulesClassPathProvider.java:42)
>        at 
> org.gradle.api.internal.DefaultClassPathRegistry.getClassPath(DefaultClassPathRegistry.java:34)
>        at 
> org.gradle.initialization.DefaultClassLoaderRegistry.<init>(DefaultClassLoaderRegistry.java:45)
>        at 
> org.gradle.api.internal.project.GlobalServicesRegistry.createClassLoaderRegistry(GlobalServicesRegistry.java:77)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.invoke(DefaultServiceRegistry.java:179)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.access$300(DefaultServiceRegistry.java:47)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.create(DefaultServiceRegistry.java:340)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectProvider.getInstance(DefaultServiceRegistry.java:244)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$SingletonService.getService(DefaultServiceRegistry.java:279)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$OwnServices.getService(DefaultServiceRegistry.java:219)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:145)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$ParentServices.getService(DefaultServiceRegistry.java:445)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:145)
>        at 
> org.gradle.api.internal.project.TopLevelBuildServiceRegistry.createRootClassLoader(TopLevelBuildServiceRegistry.java:174)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.invoke(DefaultServiceRegistry.java:179)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.access$300(DefaultServiceRegistry.java:47)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$FactoryMethodService.create(DefaultServiceRegistry.java:340)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$ManagedObjectProvider.getInstance(DefaultServiceRegistry.java:244)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$SingletonService.getService(DefaultServiceRegistry.java:279)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$OwnServices.getService(DefaultServiceRegistry.java:219)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:145)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$ParentServices.getService(DefaultServiceRegistry.java:445)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:145)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry$NestedServices.getService(DefaultServiceRegistry.java:417)
>        at 
> org.gradle.internal.service.DefaultServiceRegistry.get(DefaultServiceRegistry.java:145)
>        at org.gradle.invocation.DefaultGradle.<init>(DefaultGradle.java:63)
>        at 
> org.gradle.testfixtures.internal.ProjectBuilderImpl.createProject(ProjectBuilderImpl.java:69)
>        at org.gradle.testfixtures.ProjectBuilder.build(ProjectBuilder.java:99)
>        at org.gradle.util.HelperUtil.createRootProject(HelperUtil.groovy:74)
>        at org.gradle.util.HelperUtil.createRootProject(HelperUtil.groovy:70)
>        at 
> org.gradle.api.plugins.announce.AnnouncePluginExtensionTest.$spock_initializeFields(AnnouncePluginExtensionTest.groovy:29)
> 
> I was going to bump our build to the nightly to soak some stuff.
> 
> I think the problem is that ClasspathUtil.getClasspath(classLoader) @ 
> https://github.com/gradle/gradle/blob/master/subprojects/core/src/main/groovy/org/gradle/api/internal/classpath/DefaultModuleRegistry.java#L53
> 
> contains only: 
> [file:/Users/ld/.gradle/caches/1.0-rc-1-20120326000039+0200/workerMain/classes/,
>  
> file:/private/var/folders/s4/6tvrrsqx1zqfhhdlgp84jmpc0000gn/T/GradleWorkerProcess5560997159429793234classpath.jar]
> 
> --
> Luke Daley
> Principal Engineer, Gradleware
> http://gradleware.com
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>    http://xircles.codehaus.org/manage_email
> 
> 
> 
> 
> 
> -- 
> Darrell (Daz) DeBoer
> Principal Engineer, Gradleware 
> http://www.gradleware.com
> 


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

Reply via email to