On 02/04/2013 09:23 AM, Martin Desruisseaux wrote:
the crash occurs in the C/C++ implementation of 
java.util.zip.ZipFile.getEntry(String)

This is almost always a symptom of user error rather than a JDK bug; or at least any bug report to Oracle along these lines will be rejected. Something in your build is trying to modify a JAR file which is still held open by some other Java code, and the JRE’s libzip.so (*) is not written to handle changes “beneath its feet”—it just crashes rather than reporting an error to the code calling getEntry. (**)

You need to be careful to close any JAR files before they are potentially overwritten; JarFile.close in a finally-block is the usual idiom, or for indirect usage from URLClassLoader you must call its close method (added in Java 7).

From the stack trace, it seems the caller is the Jenkins Maven runner (for native Maven jobs). The JAR it is loading would be that of a mojo. So my suspicion would be that your build is somehow running a mojo from some JAR in the workspace (or local repository) which has been modified between the time the JAR was opened and the time the crash occurs (the end of the mojo).

Specifically your console [1] suggests that sis-utility is running a just-built (SNAPSHOT) version of sis-build-helper:collect-jars, which could be dangerous especially if there are concurrent builds using the same workspace. Consider publishing release versions of mojo projects rather than running snapshots, i.e. version them independently of the main code.


(*) On Windows the problem cannot arise because of mandatory file locks: the 
attempt to change the JAR would fail with an IOException.

(**) I have advocated that libzip be used only for the bootstrap class loader, with a pure Java (perhaps NIO-based) implementation of ZipFile for user code, which would improve robustness and diagnosis if not actually correct the error. Last I checked the JRE team declined to put in this engineering effort, though a proposal made through OpenJDK might succeed if someone wanted to do the work.

[1] https://builds.apache.org/job/sis-jdk7/lastFailedBuild/console

Reply via email to