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

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

Reply via email to