Changes since 24.9.14
Fixes
-
Prevent stale JAR cache in
Reflectorunder Maven daemon (mvnd) (#23863) (#23986)
Commit · Pull requestMirror the Gradle daemon fix (33fa374) in the Maven plugin's
ReflectorandReflectorClassLoader/CombinedClassLoader: - ExtractReflectionsClassFinder.disableJarCaching()as a public utility so both plugins can reuse it. - Wrapjar:URLs inReflectorClassLoader.getResource()andgetResources()(flow-maven-plugin) andCombinedClassLoader(flow-dev-bundle-plugin) withuseCaches(false)to prevent staleJarFileFactoryentries across daemon builds. - MakeReflectorimplementCloseablewith aclose()method that releases theURLClassLoaderfile handles, and register aCleaneraction for best-effort GC cleanup of abandoned instances. - Close the temporaryReflectorinFlowModeAbstractMojo.isHillaAvailable(MavenProject)via try-with-resources. Releated to #15458 -
Prevent stale JAR cache in
ReflectionsClassFinderunder Gradle daemon (CP: 24.9)
Commit · Pull request · IssueClose
URLClassLoaderon cleanup to release JAR file handles, and disable JVM-level JAR caching ingetResource()by wrappingjar:URLs with aURLStreamHandlerthat setsuseCaches(false). The Gradle daemon reuses JVMs across builds. When a sibling module's JAR is rewritten, two independent caching layers can hold stale file handles: 1.URLClassLoaderinternal cache (URLClassPath→JarLoader) 2.JarFileFactorystatic HashMap (populated viaJarURLConnection) TheURLClassLoader.close()call addresses layer 1, but layer 2 is JVM-global and independent of the class loader. SettinguseCaches(false)onjar:URL connections preventsJarFileFactoryfrom cachingJarFileinstances, matching the approach used by Spring'sPathMatchingResourcePatternResolver(SPR-4639). -
Propagate forceInstantiation and recreateLayoutChain flags through forward/reroute (#23848) (#23955)
Commit · Pull request · IssueWhen refreshCurrentRoute(true) triggers a BeforeEnterObserver that calls forwardTo() or rerouteTo(), the forceInstantiation and recreateLayoutChain flags were lost because the redirect navigation events were created without them. This caused the redirect target to reuse existing component instances instead of creating new ones. Propagate the flags in three locations: - AbstractNavigationStateRenderer.getNavigationEvent() for both normal and error redirect paths - InternalRedirectHandler.handle() for internal redirects
-
Merge property descriptors when getter and setter come from different interfaces (#23939)
Commit · Pull request · IssueBeanUtil's dedup loop was replacing a read-only descriptor with a write-only one (or vice versa) instead of merging them. This caused BeanPropertySet to lose the getter when a parent interface provided it and a child interface provided the setter.
-
Move thread start out of DevServerWatchDog constructor (#23898)
Commit · Pull requestStarting a thread in a constructor can expose a partially constructed object. Extract the thread start into a separate start() method that callers invoke after construction completes.
-
Route with context path name (#23836)
Commit · Pull request · Issuethe same start as the context path from clearing context path out from the url when using react router.