Read-only Gradle Wrapper Files Are Bad, mmkaay

I’ve just been messing around with a Gradle build using Gradle Wrapper, trying to import an ant build which does some clever stuff. I couldn’t get it to work, so I eventually changed the Ant script to just echo a variable, and then just tried importing the ant file into gradle and calling the echo task, like this:

ant file (test.xml):

    <target name=”test” >
<echo>the value of main.version is ${main.version}</echo>
</target>

Gradle file:

ant.importBuild ‘test.xml’

And I was just running this:

gradlew test

Simples, right? Well, as it happens, no. I’m running the 1.0 “release” of gradle wrapper (which is actually versioned as 1.0-rc-3, strangely enough). Whenever I tried to run my highly complicated build (ahem), I got this lovely error:

Could not open task artifact state cache (D:\development\ReleaseEngineering\main\commonBuildStuff\.gradle\1.0-rc-3\taskArtifacts).
> java.io.FileNotFoundException: D:\development\ReleaseEngineering\main\commonBuildStuff\.gradle\1.0-rc-3\taskArtifacts\cache.properties.lock (Access is denied)

Access is denied! Gah! Of course it is! Wait, why is access denied? Well, basically that file is read-only because it’s in source control and I’m using Perforce. I removed the read-only flag and the build worked. Problem temporarily solved. It’s going to be interesting to see how this is going to work in the C.I. system…

 

3 comments

  1. JC · July 4, 2012

    For CI you can always use the allwrite flag in the client specification to ensure everything is pulled down from P4 as writable.

    http://www.perforce.com/perforce/doc.073/manuals/cmdref/client.html

  2. huxi · July 13, 2012

    You should not put .gradle in the version control at all, only the gradle directory (without the dot) needs to be versioned. Everything in .gradle is just caching stuff and can be safely deleted and recreated.

  3. jamesbetteley · July 13, 2012

    And the winner is huxi! Yes, you’re absolutely correct. the problem was with checking in the .gradle directory. The gradle documentation for setting up the wrapper could be a lot clearer, it tells you to run a gradle build and check the wrapper in, but neglects to remind you about the .gradle directory. That’s my excuse and I’m sticking with it! 🙂 http://gradle.org/docs/current/userguide/gradle_wrapper.html

Leave a comment