Maven multi-module repository of Keycloak SPI provider JARs. The root POM (me.deangrant.keycloak:keycloak-providers) is an aggregator (packaging pom); each provider lives under providers/<name>/ as its own module and produces a deployable JAR for Keycloak’s providers/ directory.
Providers compile against Keycloak server SPI artifacts (keycloak-server-spi, keycloak-server-spi-private, keycloak-core) and JBoss Logging with Maven scope provided—Keycloak supplies those APIs at runtime. Modules register factories via META-INF/services (Java ServiceLoader). There are no Maven profiles for Keycloak versions; the single override point is the root property keycloak.version.
- JDK 21 (
maven.compiler.release/ Enforcer[21,)) - Maven 3.9+ (Enforcer
[3.9,))
Default compile target: 26.7.1 (keycloak.version in the root POM).
CI recompiles and runs the unit suite (JUnit 5 + Mockito; no Testcontainers / Failsafe ITs) against:
26.7.126.6.4
Versions outside this set (including other majors) are unsupported unless added to the CI matrix. Override locally or in CI with:
mvn -B test -Dkeycloak.version=<version>| Provider | SPI | Description |
|---|---|---|
| last-login-timestamp | eventsListener (EventListenerProvider) |
On successful LOGIN, writes epoch-millis to a user attribute (default lastLoginTimestamp) after commit on a background pool—advisory, best-effort, non-blocking for auth |
| magic-link | authenticator + actionTokenHandler |
Browser-flow Magic Link, Magic Link Continuation, and Email OTP; theme-resources email/login templates; factory-injected customization for library consumers |
Provider-specific install, SPI config, and limitations are documented in each module README.
From the repository root:
mvn clean packageEach module JAR is written to providers/<name>/target/ (for example providers/last-login-timestamp/target/last-login-timestamp.jar or providers/magic-link/target/magic-link.jar).
Build one module and its reactor dependencies:
mvn clean package -pl providers/last-login-timestamp -am
mvn clean package -pl providers/magic-link -ammvn -B testOptional Keycloak SPI version: -Dkeycloak.version=<version> (same property CI uses for the matrix).
Format sources and run the same checks as CI lint:
mvn -B spotless:apply
mvn -B verify -DskipTestsverify -DskipTests runs Maven Enforcer, compiles with Error Prone, and Spotless check (Google Java Format)—no Surefire.
MIT © Dean Grant