AbstractFileResolver produces org.gradle.api.UncheckedIOException when path is too long on Mac OSX

Found on Gradle 2.2.

I’m seeing an org.gradle.api.UncheckedIOException thrown from AbstractFileResolver on Mac OS X 10.9 when I try to run a particular Test task in my project. getCanonicalFile() throws an exception because the submitted class path is too long.

Seems to be coming from this optimization in AbstractFileResolver:

// Short-circuit the slower lookup method by using the canonical file

File canonical = candidate.getCanonicalFile();

if (candidate.getPath().equalsIgnoreCase(canonical.getPath())) {

return canonical;

}

I was able to work around the issue by enclosing the block above in a try-catch, so AbstractFileResolver.normalize() proceeds with the ‘slower’ lookup in the case of an IOException here.

Would recommend including something along those lines in the next release in case anyone else runs into this issue.

Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task [task name removed] [ … ]

at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:58) Caused by: org.gradle.api.UncheckedIOException: Could not normalize path for file [classpath removed].

at org.gradle.api.internal.file.AbstractFileResolver.normalise(AbstractFileResolver.java:138)

at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:79)

at org.gradle.api.internal.file.AbstractFileResolver.resolve(AbstractFileResolver.java:60)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext$FileCollectionConverter.convertInto(DefaultFileCollectionResolveContext.java:173)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.doResolve(DefaultFileCollectionResolveContext.java:134)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.resolveAsFileCollections(DefaultFileCollectionResolveContext.java:82)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext$FileCollectionConverter.convertInto(DefaultFileCollectionResolveContext.java:157)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.doResolve(DefaultFileCollectionResolveContext.java:98)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.resolveAsFileCollections(DefaultFileCollectionResolveContext.java:82)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext$FileCollectionConverter.convertInto(DefaultFileCollectionResolveContext.java:157)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.doResolve(DefaultFileCollectionResolveContext.java:98)

at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.resolveAsFileCollections(DefaultFileCollectionResolveContext.java:82)

at org.gradle.api.internal.file.CompositeFileCollection.getSourceCollections(CompositeFileCollection.java:144)

at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:38)

at org.gradle.api.internal.file.AbstractFileCollection.getAsPath(AbstractFileCollection.java:64)

at org.robolectric.gradle.RobolectricPlugin$_apply_closure1_closure4.doCall(RobolectricPlugin.groovy:131)

at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:548)

at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:529)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)

… 47 more Caused by: java.io.IOException: File name too long

at org.gradle.api.internal.file.AbstractFileResolver.normalise(AbstractFileResolver.java:120)

… 66 more

Hey David, thanks for reporting this. I’ve raised GRADLE-3252 to track it