Thanks Peter, I will explain it better with a simple example.
Imagine that this is the layout of the project:
src/main/java/HelloWorld.java
lib/zipped_readonly_property_file.zip
build.gradle
where the file “lib/zipped_readonly_property_file.zip” is a zip/jar/whatever compressed archive including a readonly file (in the example, it contains simply a HelloWorld.properties file) and that at least one of the file inside the zip is a read only file.
This is the build.gradle:
apply plugin: "java"
dependencies {
runtime files("lib/zipped_readonly_property_file.zip")
}
task fatJar(type: Jar) {
from {
configurations.runtime.filter {
it.path.matches(".*")
}.collect {
zipTree(it)
}
}
from sourceSets.main.output
classifier = 'fatJar'
}
Now, if you run “gradle fatJar”, gradle will expand the zip file in a temporary folder, and then compress it into the fat jar. Fine, it works as expected. This is the command output:
:compileJava
:processResources UP-TO-DATE
:classes
:fatJar
BUILD SUCCESSFUL
Now, for a second time, try to run “gradle fatJar”. This time the zip file will be expanded again OVER the previously extracted folder, but since the property file was read-only, gradle will fail complaining that:
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:fatJar
FAILURE: Build failed with an exception.
* What went wrong:
Could not expand ZIP '/home/larzeni/.eclipseWorkspace/gradleReadOnlyTest/lib/zipped_readonly_property_file.zip'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
And if you go through using --debug option, the problem cause can be traced to:
org.gradle.api.GradleException: Could not copy zip entry /home/larzeni/.eclipseWorkspace/gradleReadOnlyTest/lib/zipped_readonly_property_file.zip!HelloWorld.properties to '/home/larzeni/.eclipseWorkspace/gradleReadOnlyTest/build/tmp/expandedArchives/zipped_readonly_property_file.zip_67dpdot7v9plqhjmhvtlkg3gjd/HelloWorld.properties'
That is, gradle cannot overwrite a zip that includes a read-only file. Obviously if you run gradle clean , the tmp/zip-expanded directory will be removed and the build will work fine again.
Possible solutions coud be: A) do not re-expand a zipped file which was already expanded if it’s not changed or, B) delete the temporary dir that contains the expanded zip after the build.
I hope now the problem is more understandable.
If you want, I’ve put the files for the example at the following link: https://www.box.com/s/sb5obht20jhmgjg7c1t5
Thanks for your help!