Bootstrap / jQuery Update & Fluid Infusion Removal#2915
Conversation
There was a problem hiding this comment.
Pull request overview
This WIP PR updates uPortal’s front-end stack for Bootstrap/jQuery changes and removes Fluid Infusion by replacing legacy Fluid-based UI components with “modern” vanilla/Bootstrap 5 equivalents.
Changes:
- Removed multiple legacy Fluid-based JavaScript components and introduced modern replacements (no-Fluid).
- Updated many JSP/XSL templates from Bootstrap 3-era markup/classes and jQuery patterns to Bootstrap 5-compatible equivalents.
- Switched skin build tooling from LESS to SCSS (Sass) and adjusted Gradle/WebJar resource staging.
Reviewed changes
Copilot reviewed 147 out of 193 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-showHideToggle.js | Removed legacy Fluid-based show/hide toggle component. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-rating-option.js | Removed legacy rating modal implementation (Fluid/old Bootstrap patterns). |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-parameter-editor.js | Removed legacy Fluid ParameterEditor implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-layout-selector.js | Removed legacy Fluid layout selector implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-layout-persistence.js | Removed legacy Fluid layout persistence implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-favorite.js | Removed legacy jQuery-based favorites implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-entity-registry.js | Removed legacy Fluid entity registry implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-config-lightbox.js | Removed legacy jQuery config lightbox implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/up-autocomplete.js | Removed legacy Fluid autocomplete implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/prevent-component-reload.js | Added stub script placeholder for removed instrumentation. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-util.js | Added utility helpers intended to replace Fluid-dependent helpers. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-url-provider.js | Replaced legacy tooltip-conflict code with a modern URL provider and compatibility wrapper. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-show-hide-toggle.js | Added modern replacement for show/hide toggle with a backward-compatible up.showHideToggle. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-portlet-registry.js | Added modern portlet registry implementation using fetch and a small event system. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-layout-preferences-persistence.js | Added modern layout persistence implementation using fetch and DOM updates. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-flyout-nav.js | Added modern flyout navigation implementation (hover interactions). |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-favorite.js | Added modern favorites manager (fetch-based) with compatibility functions. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/modern-config-lightbox.js | Added modern config lightbox implementation using fetch + Bootstrap Modal. |
| uPortal-webapp/src/main/webapp/media/skins/common/javascript/uportal/flyout-nav.js | Removed legacy Fluid flyout navigation implementation. |
| uPortal-webapp/src/main/webapp/media/skins/common/css/modern-uploader.css | Added Bootstrap-compatible uploader CSS replacement. |
| uPortal-webapp/src/main/webapp/media/skins/common/css/modern-portlet-list.css | Added portlet list layout CSS to match expected gallery/list rendering. |
| uPortal-webapp/src/main/webapp/media/skins/common/css/modern-pager.css | Added Bootstrap-compatible pager CSS replacement. |
| uPortal-webapp/src/main/webapp/media/skins/common/common_skin.xml | Switched skin resources to modern JS/CSS set and removed legacy includes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Translator/translator.jsp | Updated markup/classes to Bootstrap 5 card/forms/buttons. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/tenantManager.jsp | Converted panels/pull-right to cards/float utilities and button sizing. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/tenantDetails.jsp | Updated validation/Bootstrap classes and layout grid usage. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/report.jsp | Converted panels to cards and labels to badges; updated float utilities. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/TenantManager/addTenant.jsp | Updated form layout and validation classes for Bootstrap 5. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Statistics/reportList.jsp | Updated portlet wrapper classes to Bootstrap 5 card structure. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Statistics/reportGraph.jsp | Updated portlet wrapper classes and modernized jQuery event binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/results.jsp | Updated portlet wrapper classes and replaced column filter widgets with SearchPanes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/googleLineChart.jsp | Updated portlet wrapper classes to Bootstrap 5 card structure. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/googleColumnChart.jsp | Updated portlet wrapper classes to Bootstrap 5 card structure. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/SqlQuery/config.jsp | Updated portlet wrapper classes and form layout for Bootstrap 5. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/SessionTimeout/body.jsp | Updated modal dismiss attribute to data-bs-dismiss and button classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/searchRest.jsp | Updated tab markup to Bootstrap 5 nav/tab patterns and float utilities. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/searchLauncher.jsp | Updated search launcher markup and modernized submit handler binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Search/search.jsp | Updated search portlet card layout and modernized submit handler binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/maintenance.jsp | Replaced Bootstrap 3 jumbotron with Bootstrap 5 equivalent container styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/generic.jsp | Converted legacy widget titlebar to Bootstrap 5 card and breadcrumb classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/PortletError/detailed.jsp | Converted to Bootstrap 5 card layout and updated show/hide toggle initialization. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/PopularPortlets/listPortlets.jsp | Updated card markup, label styling, pager class, and SearchPanes integration. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Marketplace/portlet/view.jsp | Updated panel markup/buttons/grid classes and modernized click handlers. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/sitemap.jsp | Reduced UI error surface area and changed logging behavior on sitemap failure. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/logout.jsp | Updated button sizing from btn-xs to btn-sm. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/login.jsp | Modernized login markup and button styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Invoker/greeting.jsp | Updated responsive utility classes to Bootstrap 5 equivalents. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/ImportExportPortlet/export.jsp | Converted portlet wrapper to card layout and updated form layout classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/ImportExportPortlet/delete.jsp | Converted portlet wrapper to card layout and modernized submit handler binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/GoogleAnalytics/config.jsp | Updated labels to Bootstrap 5 form-label styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/FragmentAdministration/index.jsp | Converted portlet wrapper to card layout and updated nav list classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/view_zero.jsp | Updated float utility class to Bootstrap 5 equivalent. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/view.jsp | Updated navbar markup to Bootstrap 5 and modernized event binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/edit_zero.jsp | Updated alert close button to Bootstrap 5 btn-close and dismiss attributes. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Favorites/edit.jsp | Updated alert close button and tooltip data attributes; modernized event binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/DynamicRespondrSkin/skinConfig.jsp | Updated Bootstrap form classes and modernized jQuery submission handling. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Directory/mobileDirectory.jsp | Removed Fluid reference and modernized binding/unbinding patterns. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Directory/directory.jsp | Converted portlet wrapper to card structure and updated label styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/BackgroundPreference/viewBackgroundPreference.jsp | Updated layout utility classes and modernized event binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/jsp/Activity/activity.jsp | Updated spelling in comment and modernized event binding; converted wrapper to card. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/viewUserDetails.jsp | Updated markup for Bootstrap 5 and ensured impersonation POST uses preventDefault + DOM submit. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/viewPermissions.jsp | Updated wrapper to card layout and replaced filter widgets with SearchPanes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/selectUserAction.jsp | Converted panel list to card list and updated wrapper/content classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/confirmRemove.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/update-password/success.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/update-password/enterPassword.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/toggle-resources-aggregation/toggle-aggregation.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/snooper/snooper.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/viewAccountDetails.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/success.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/enterPassword.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/self-edit-account/editLocalAccount.jsp | Switched ParameterEditor usage to modern editor and updated form submit binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-user-layout/reset-result.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-user-layout/reset-confirm.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/invalidLoginToken.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/createPasswordSuccess.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-password/createPassword.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/reset-my-layout/reset-begin.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/portlet-manager/confirmRemove.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/portal-administration/administrativeLinks.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/showActivity.jsp | Converted wrapper/content to card layout and replaced filter widgets with SearchPanes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/selectTarget.jsp | Converted wrapper/content to card layout and migrated to ModernAutocomplete. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/permissionLookupResult.jsp | Converted wrapper/content to card layout and replaced filter widgets with SearchPanes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/listOwners.jsp | Converted wrapper/content to card layout; migrated to ModernAutocomplete; updated form layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/listActivities.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/permissions-administration/deletePermission.jsp | Converted wrapper/content to card layout and modernized click binding. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/locale-selector/selectLocale.jsp | Converted wrapper/content to card layout and updated form label classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/local-login/loginForm.jsp | Converted wrapper/content to card layout and updated form grid classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/groups-manager/selectGroupType.jsp | Converted panel list to card list and updated wrapper/content classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/fragment-audit/fragment-audit.jsp | Converted wrapper/content to card layout and updated hidden template markup. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/fragment-administration/select-fragment-form.jsp | Converted wrapper/content to card layout and updated form layout utilities. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/forgot-password/sendTokenSuccess.jsp | Converted wrapper/content to card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/forgot-password/forgotPassword.jsp | Converted wrapper/content to card layout and updated label styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/exit-fragment-administration/logout-view.jsp | Updated form layout utilities and button styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/configMode.jsp | Converted wrapper/content to card layout and added explicit save/cancel navigation buttons. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/chooseType.jsp | Converted wrapper/content to card layout and updated form labels. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-portlet/choosePortlet.jsp | Converted wrapper/title/content to card markup and updated grid utility classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-permission/editPermission.jsp | Converted wrapper/content to card layout and shortened ready handler usage. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/viewGroupPermissions.jsp | Converted wrapper/content to card layout and replaced filter widgets with SearchPanes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/reviewGroup.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/editDetails.jsp | Converted wrapper/content to card layout and updated labels. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-group/confirmRemove.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/edit-account/editLocalAccount.jsp | Switched ParameterEditor usage to modern editor and updated label styling. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/confirm-flush.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/confirm-flush-all.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/cache-statistics.jsp | Converted wrapper/content to Bootstrap 5 card layout. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/cache-manager/cache-list.jsp | Converted wrapper/content to Bootstrap 5 card layout and updated table sizing classes. |
| uPortal-webapp/src/main/webapp/WEB-INF/flows/attribute-swapper/attributesForm.jsp | Converted wrapper/content to Bootstrap 5 card layout and updated label classes. |
| uPortal-webapp/src/main/resources/properties/portal.properties | Enabled flyout menus by default. |
| uPortal-webapp/src/main/resources/layout/theme/respondr/respondr.xsl | Removed Fluid global wiring, updated event listeners, and adjusted fragment admin UI hooks. |
| uPortal-webapp/src/main/resources/layout/theme/respondr/regions.xsl | Updated Bootstrap 5 classes and modal/hover behavior wiring. |
| uPortal-webapp/src/main/resources/layout/theme/respondr/navigation.xsl | Updated dropdown/toggle attributes and responsive utility classes for Bootstrap 5. |
| uPortal-webapp/src/main/resources/layout/theme/respondr/content.xsl | Updated dropdown/modal attributes for Bootstrap 5 and modernized favorites click binding. |
| uPortal-webapp/package.json | Replaced LESS build script with Sass SCSS compilation for skin build. |
| uPortal-webapp/build.gradle | Updated WebJar dependencies and skin aggregation pipeline; added bootstrap webjar; SCSS compilation integration. |
| uPortal-utils/uPortal-utils-core/build.gradle | Updated resource-server dependency exclusions to avoid logging/spring conflicts. |
| uPortal-api/uPortal-api-internal/src/main/java/org/apereo/portal/portlets/groupadmin/GroupAdministrationHelper.java | Added argument validation and guardrails around GroupService lookup. |
| package.json | Migrated stylelint setup from LESS to SCSS. |
| gradle.properties | Updated project version suffix and bumped Bootstrap/resource-server versions. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Google's charts api was shut down quite a while back. At some point, this functionality will be replaced.
bjagg
left a comment
There was a problem hiding this comment.
Reviewing ahead of the resource-server 1.5.1 release (happening shortly) which will unblock CI.
CI blocker — resolved soon
All 5 CI jobs fail with Could not find org.jasig.resourceserver:resource-server-core:1.5.1-SNAPSHOT. Once resource-server 1.5.1 is published to Maven Central, update gradle.properties to reference the release version and CI will go green.
Copilot review triage
Went through all 27 Copilot inline comments and Bill's 5 responses. Here's my assessment of what's left to address, categorized by severity.
Fix before merge (runtime breakage risk)
1. modern-favorite.js — .json() on potentially empty POST responses (5 instances)
The legacy jQuery $.ajax calls for addFavorite, removeFavorite, and moveFavorite didn't parse the response body. The new fetch + response.json() will throw a SyntaxError on empty or non-JSON responses, breaking favorites functionality silently.
Fix: either check response.headers.get('content-type') before parsing, or use response.text() and only parse if non-empty:
const text = await response.text();
return text ? JSON.parse(text) : null;This is the most likely runtime bug in the PR.
2. modern-config-lightbox.js — Content-Type header on GET requests
headers: { 'Content-Type': 'application/json' }Setting Content-Type on GET is semantically incorrect (no body) and triggers unnecessary CORS preflights in cross-origin scenarios. Simple fix: remove the header from GET requests.
Fix before merge (visual bugs)
3. btn-close buttons with × inner content (3-4 locations)
regions.xsl and Favorites/edit.jsp have:
<button class="btn-close">×</button>Bootstrap 5's btn-close renders the X via CSS background-image. The inner × creates a duplicate/overlapping close icon. Bill noted "partially false positive, added a11y tweak" on one instance — but the remaining instances still have the × content.
Fix: remove × from btn-close buttons. If the a11y concern is screen reader labeling, use aria-label="Close" instead (which BS5 btn-close already supports).
Document before merge (behavior change)
4. portal.properties flyout default flipped from false to true
This changes the default navigation mode for all new/existing deployments. Worth a line in the PR description and release notes so adopters aren't surprised by a nav behavior change when they upgrade.
Deferred (Bill already noted, agree)
modern-portlet-registry.jsarray-as-map pattern — "significant refactor for code that is currently working" — agree, defermodern-layout-preferences-persistence.jsarray encoding — Bill confirmed server-side expectskey[]format — not an issuebuild.gradlehardcoded Bootstrap version — Bill says it's functioning correctly, and the SCSS compilation needs a specific path structure — fine for nowmodern-portlet-registry.jsfetch(null) constructor — only matters if portletListUrl isn't configured, which would be a setup errorsitemap.jspsilent failure — low-traffic page, defermodern-util.jsid parsing — edge case, defer
Summary
Three code fixes (favorites .json(), config-lightbox Content-Type, btn-close × content) and one documentation item (flyout default). All are small — the favorites fix is the most important since it could break a commonly-used feature at runtime.
Once resource-server 1.5.1 is published and gradle.properties is updated, CI should go green assuming no compile issues. At that point, with these fixes applied, this PR is ready to merge.
Huge effort — 193 files, Bootstrap 3→5, jQuery update, Fluid removal, and modern vanilla JS replacements for all the old Fluid-based components. Well done.
…y() (#2943) Newer Guava (pulled in transitively via resource-server 1.5.x) annotates com.google.common.base.Function.apply() with @CheckReturnValue, so ErrorProne now flags the two call sites that discard the return: uPortal-rendering/src/main/java/org/apereo/portal/portlet/container/ cache/LimitingTeeWriter.java:86 cache/LimitingTeeOutputStream.java:84 The callback's Function<T,?> return was always intentionally discarded (the sole caller returns null), so the fix is to name the captured result 'unused' — the convention ErrorProne recognizes as "intentional discard" — with @SuppressWarnings("unused") to also silence the compiler's own unused-variable lint. Master CI passes today because its resource-server 1.3.1 pin pulls an older Guava without the annotation; the check triggers on branches that have bumped to resource-server 1.5.x+ (e.g. #2915 'Bootstrap / jQuery Update & Fluid Infusion Removal', which fails all 5 CI jobs on this exact error). Landing the fix on master lets that branch rebase and go green. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
uPortal pins springVersion=4.3.30.RELEASE explicitly, but resource-server 1.5.x transitively depends on Spring 5.x. Without an exclusion, a build bumping resource-server to 1.5.x ends up with both Spring versions on the classpath and javac resolves org.springframework.web.util.UriUtils against the Spring 5 API — where encodePathSegment(String, String) no longer declares 'throws UnsupportedEncodingException'. The catch clause in uPortal-utils-core's Util.encodePathSegment() then becomes unreachable and compilation fails with: Util.java:143: error: exception UnsupportedEncodingException is never thrown in body of corresponding try statement This is exactly the CI failure on #2537 (Renovate's resource-server 1.3.1 → 1.5.2 bump), and the fix originates from @Naenyn's #2915 where this exclusion is part of a larger 193-file PR. Landing it independently on master unblocks #2537 and any other branch bumping resource-server, without coupling to the Bootstrap/jQuery work in #2915. Exclusion policy mirrors what #2915 applies: - resource-server-api: exclude spring-jcl (module-level) and all slf4j - resource-server-utils: exclude all of org.springframework and all slf4j The narrower exclusion on resource-server-api reflects that it's a smaller artifact; the broader exclusion on resource-server-utils prevents the full Spring 5 web stack from riding along. Verified locally: - master + this change (resourceServerVersion=1.3.1): :uPortal-utils:uPortal-utils-core:compileJava BUILD SUCCESSFUL - master + this change + resourceServerVersion=1.5.2 (simulated): :uPortal-utils:uPortal-utils-core:compileJava BUILD SUCCESSFUL (the Util.java error goes away) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Finally a green build! Huzzah! |
bjagg
left a comment
There was a problem hiding this comment.
This is a huge effort! Thank you for sticking with it. Approved. We can polish any additional items in follow-up PRs.
* docs: add v5.17.3 to CHANGES and HISTORY Problem: v5.17.3 was just released. CHANGES.md (operator-relevant upgrade notes) and HISTORY.md (per-version release index) hadn't been updated for this release. CHANGES had been silent since v5.15.2 and HISTORY hadn't been touched since v5.2. Goal: capture the operator-facing impact of 5.17.3 (Bill's frontend modernization affects customized skins) and start re-tracking the 5.17.x line in HISTORY. Changes: - docs/CHANGES.md: add a `## v5.17.3` block under "Next Release" flagging the Bootstrap/jQuery/Fluid Infusion modernization (#2915) and warning operators that customized skins will need updating (LESS → SCSS, BS3/4 class names → BS5, no more Fluid library). - docs/HISTORY.md: add a `### 5.17` section listing 5.17.0–5.17.3 with their release dates and tag links. Note above the section that 5.3–5.16 are not enumerated; deferred to the GitHub releases index. Backfill of those versions is out of scope here. Notes: v5.17.3 itself is already cut and tagged — these are docs catching up. Per the project's PR-first policy, sending this through review rather than committing direct to master. * docs: backfill v5.17.2 Java 11 floor in CHANGES.md Problem: CHANGES.md is for deployment-impacting changes (Java/Servlet bumps, DDL changes, mandatory property/cache additions). v5.17.2 bumped sourceCompatibility from 1.8 to 11 in build.gradle (commit ebe7297 by @Naenyn, 2026-03-05) which means deployers on Java 8 can no longer run this release. That impact never made it into CHANGES.md when v5.17.2 shipped. Goal: backfill the v5.17.2 entry so deployers reading CHANGES.md know they need a JVM upgrade before consuming v5.17.2 or later. Changes: - docs/CHANGES.md: insert a `## v5.17.2` block between v5.17.3 and v5.15.2 calling out the Java 11 floor. Notes: chose to add this to the existing v5.17.3 docs PR rather than spinning a separate one — they're both backfill work for the same file and ship together cleanly.
This is a WIP PR that handles the Bootstrap & jQuery updates for uPortal. This PR also includes the removal of Fluid Infusion.