Adam Murdoch wrote:


Steve Appling wrote:
I am still having some problems related (I think) to the unmanagedClasspath changes. I can't get our buildSrc to work now.
Previously we had to do the following in the buildSrc/build.gradle:
  compile.groovyClasspath = org.gradle.util.BootstrapUtil.groovyFiles
  testCompile.groovyClasspath = org.gradle.util.BootstrapUtil.groovyFiles
compile.unmanagedClasspath(org.gradle.util.BootstrapUtil.gradleClasspath as File[])

I have tried several combinations to get this working, but still can't get the gradle files on the classpath in buildsrc. I get errors like "unable to resolve class org.gradle.api.Project".

I am currently just trying to add the gradle files to the compile classpath using:
dependencies {
   compile files(org.gradle.util.BootstrapUtil.gradleClasspath)
}

This still doesn't work - I would appreciate any other ideas to try. Perhaps this will make more sense on Monday :)



This is from the default buildSrc build script, which should work for you:

dependencies {
   compile files(org.gradle.util.BootstrapUtil.gradleClasspath)
   groovy files(org.gradle.util.BootstrapUtil.groovyFiles)
}


It looks very similar to what you are trying, so I'm not confident. If you are still getting failures, can you try again with the -s flag, so we can see where the failure is?


Adam


I think I have figured this out. BootstrapUtil.gradleClasspath and groovyFiles return a list of File objects. Using these with Project.files ends up resulting in invalid classpaths because they are interpreted as relative paths to the buildSrc directory.

I got this working as follows:
Index: PathResolvingFileCollection.java
===================================================================
--- PathResolvingFileCollection.java    (revision 1582)
+++ PathResolvingFileCollection.java    (working copy)
@@ -58,7 +58,10 @@
             } else if (element instanceof FileCollection) {
                 FileCollection fileCollection = (FileCollection) element;
                 result.addAll(fileCollection.getFiles());
-            } else {
+            } else if (element instanceof File) {
+                result.add((File) element);
+            }
+            else {
                 result.add(project.file(element));
             }
         }

I don't know if you want to make this change or allow project.file to handle direct file objects without treating them as relative paths.


Also, I'm not sure that the classpath for groovy compiles is working the way it is intended. There is a check in GroovyCompile to make sure that the classpath for the groovy configuration is not empty, but you don't actually have to have the groovy jar in this classpath. In GradleUtil.executeIsolatedAntScript (used to actually run the compile with ant), it adds all the non-logging gradle jars (including groovy-all-1.5.6.jar). So if you added dependencies { groovy files('junk') } it would build with the groovy that is shipped with gradle (1.5.6). Even if you specify another groovy jar, both jars will be on the classpath, which seems dangerous.

--
Steve Appling
Automated Logic Research Team

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to