Repository navigation
Read jar resources without the JVM jar: cache - #139
Merged
slachiewicz merged 1 commit intoOct 28, 2026
Merged
Conversation
JarHolder kept a JarFile from the JVM-wide jar: cache open for the life of the loader, so the jar stayed locked on Windows and was read stale once rewritten (JDK-8239054). It now indexes the jar once and reads each resource through its own uncached connection. Do not switch back to a cached JarURLConnection.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JarResourceLoaderkept each jar open through aJarFilefrom the JVM-widejar:cache and never closed it, so the jar stayed locked on Windows and was read stale once rewritten, for example abuild-toolsmodule rebuilt in the same reactor or under mvnd. This is the open JDK bug JDK-8239054.JarHoldernow indexes the jar once and reads each resource through its own uncached connection, so nothing stays open between reads.JarHolder.getPlexusResource(..).getURL()now returns thejar:…!/entryURL; it used to resolve the entry name against the jar file's own URL, which points next to the jar rather than into it.Verified:
JarResourceLoaderTest.readsRewrittenJarfails on master withEOFException: Unexpected end of ZLIB input streamand passes here.Part of apache/maven#13738.