This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/main by this push:
new 8cce5a86679 CAUSEWAY-3948: fixes webjar resource lookup
8cce5a86679 is described below
commit 8cce5a866791d88900e730ff263d5c16bc226b3b
Author: andi-huber <[email protected]>
AuthorDate: Fri Feb 20 11:57:40 2026 +0100
CAUSEWAY-3948: fixes webjar resource lookup
- was no issue in IDE, but when deployed using JIB
---
viewers/commons/model/pom.xml | 5 ++
.../commons/model/src/main/java/module-info.java | 1 +
.../commons/model/webjar/WebjarEnumerator.java | 53 +++++-----------------
3 files changed, 18 insertions(+), 41 deletions(-)
diff --git a/viewers/commons/model/pom.xml b/viewers/commons/model/pom.xml
index 34c6cbe3bc0..5331ea85fe2 100644
--- a/viewers/commons/model/pom.xml
+++ b/viewers/commons/model/pom.xml
@@ -47,6 +47,11 @@
<artifactId>causeway-core-runtime</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.webjars</groupId>
+ <artifactId>webjars-locator-core</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.webjars</groupId>
<artifactId>font-awesome</artifactId>
diff --git a/viewers/commons/model/src/main/java/module-info.java
b/viewers/commons/model/src/main/java/module-info.java
index d962f328310..0b0709b8e7d 100644
--- a/viewers/commons/model/src/main/java/module-info.java
+++ b/viewers/commons/model/src/main/java/module-info.java
@@ -38,4 +38,5 @@
requires spring.core;
requires org.apache.causeway.viewer.commons.applib;
requires org.apache.causeway.core.runtime;
+ requires webjars.locator.core;
}
\ No newline at end of file
diff --git
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/webjar/WebjarEnumerator.java
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/webjar/WebjarEnumerator.java
index eac34885f4f..8c7b7069c9d 100644
---
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/webjar/WebjarEnumerator.java
+++
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/webjar/WebjarEnumerator.java
@@ -18,20 +18,16 @@
*/
package org.apache.causeway.viewer.commons.model.webjar;
-import java.net.URL;
-import java.util.Enumeration;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
-import java.util.TreeSet;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
+import org.webjars.WebJarAssetLocator;
+import org.webjars.WebJarAssetLocator.WebJarInfo;
+
import org.apache.causeway.commons.internal.base._Lazy;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import org.apache.causeway.commons.io.TextUtils;
-
-import lombok.SneakyThrows;
/**
* Utility to scan webjar version strings dynamically from class-path under
{@code META-INF/resources/webjars}.
@@ -53,51 +49,26 @@ public static WebjarResource lookupElseFail(final String
path) {
.noSuchElement("no webjar found on class-path under
META-INF/resources/webjars matching sub-path '%s'", path));
}
+ // datatables/2.3.6
+ // npm/bootstrap-select/1.14.0-beta3
+ // npm/inputmask/5.0.9
+ // jquery-ui/1.14.1
public record WebjarResource(
String path,
String version) {
- static Optional<WebjarResource> parseFromURL(final String url) {
- if(url==null
- || !url.startsWith("jar:file:")
- || !url.contains("/org/webjars/")
- || !url.contains(".jar!"))
- return Optional.empty();
- // datatables/2.3.6
- // npm/bootstrap-select/1.14.0-beta3
- // npm/inputmask/5.0.9
- // jquery-ui/1.14.1
- var pathAndVersion = TextUtils.cutter(url)
- .keepAfter("/org/webjars/")
- .keepBefore(".jar!")
- .keepBeforeLast("/");
- return Optional.of(new WebjarResource(
- pathAndVersion.keepBeforeLast("/").getValue(),
- pathAndVersion.keepAfterLast("/").getValue()));
+ static WebjarResource from(final WebJarInfo webJarInfo) {
+ return new WebjarResource(webJarInfo.getArtifactId(),
webJarInfo.getVersion());
}
}
// -- HELPER
private static Map<String, WebjarResource> scanClassPath() {
- return webjarURLs().stream()
- .map(WebjarResource::parseFromURL)
- .filter(Optional::isPresent)
- .map(Optional::get)
+ var locator = new WebJarAssetLocator();
+ return locator.getAllWebJars().values().stream()
+ .map(WebjarResource::from)
.collect(Collectors.toMap(WebjarResource::path,
UnaryOperator.identity()));
}
- @SneakyThrows
- private static Set<String> webjarURLs() {
- Set<String> webjarURLs = new TreeSet<>();
- Enumeration<URL> resources = WebjarEnumerator.class.getClassLoader()
- .getResources("META-INF/resources/webjars");
-
- while (resources.hasMoreElements()) {
- URL resource = resources.nextElement();
- webjarURLs.add(resource.toString());
- }
- return webjarURLs;
- }
-
}