具有依赖项的 Keycloak 扩展
Keycloak extension with dependencies
我正在创建一个带有依赖项的 Keycloak 扩展。我在 pom.xml
上添加了这样的条目:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
然后我将它部署到 Keycloak:
mvn clean install wildfly:deploy
但是当我 运行 它时,我得到了错误:
org.jboss.resteasy.spi.UnhandledException: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject from [Module "deployment.keycloak-authenticator.jar" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
... 66 more
如何在Keycloak中为扩展添加依赖?
你必须create your SPI dependencies as jboss modules。
步骤:
在 src/main/resources/META-INF 目录或您的 SPI 中添加一个 jboss-deployment-structure.xml 文件(oficial documentation):
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.json.json" />
</dependencies>
</deployment>
</jboss-deployment-structure>
创建 $KEYCLOAK_HOME/modules/system/layers/base/org/json/json/main 目录
在创建的目录中添加json-20160810.jar
在同一目录中添加一个 module.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.5" name="org.json.json">
<properties>
<property name="jboss.api" value="private"/>
</properties>
<resources>
<resource-root path="json-20160810.jar"/>
</resources>
<dependencies>
</dependencies>
</module>
编译你的 SPI
重启 keycloak
重新部署您的 SPI
有更好的方法,部署为 EAR 存档。该项目展示了如何:https://github.com/stianst/keycloak-experimental/tree/master/fido-u2f
我正在创建一个带有依赖项的 Keycloak 扩展。我在 pom.xml
上添加了这样的条目:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
然后我将它部署到 Keycloak:
mvn clean install wildfly:deploy
但是当我 运行 它时,我得到了错误:
org.jboss.resteasy.spi.UnhandledException: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.NoClassDefFoundError: org/json/JSONObject
Caused by: java.lang.ClassNotFoundException: org.json.JSONObject from [Module "deployment.keycloak-authenticator.jar" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
... 66 more
如何在Keycloak中为扩展添加依赖?
你必须create your SPI dependencies as jboss modules。
步骤:
在 src/main/resources/META-INF 目录或您的 SPI 中添加一个 jboss-deployment-structure.xml 文件(oficial documentation):
<jboss-deployment-structure> <deployment> <dependencies> <module name="org.json.json" /> </dependencies> </deployment> </jboss-deployment-structure>
创建 $KEYCLOAK_HOME/modules/system/layers/base/org/json/json/main 目录
在创建的目录中添加json-20160810.jar
在同一目录中添加一个 module.xml 文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.5" name="org.json.json"> <properties> <property name="jboss.api" value="private"/> </properties> <resources> <resource-root path="json-20160810.jar"/> </resources> <dependencies> </dependencies> </module>
编译你的 SPI
重启 keycloak
重新部署您的 SPI
有更好的方法,部署为 EAR 存档。该项目展示了如何:https://github.com/stianst/keycloak-experimental/tree/master/fido-u2f