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
