我正在为keycloak编写一个验证器提供程序,我将其打包为.jar。一旦它使用了来自keycloak-services的类,我就会得到一个NoClassDefFoundError。当通过"mvn wildfly:deploy“部署提供程序时,我得到了相同的错误。
我肯定遗漏了什么,但我很少做java代码,而且在这一点上我一无所知。
我在pom.xml中定义了依赖项,并尝试了'provided‘和'compile’作为作用域:
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<scope>provided</scope>
<version>3.1.4.GA</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<scope>provided</scope>
<version>${keycloak.version}</version>
</dependency>
</dependencies>一旦我将以下代码添加到身份验证函数中,我就会得到错误:
AuthenticationSessionModel authSession = context.getAuthenticationSession();
SerializedBrokeredIdentityContext serializedCtx =
SerializedBrokeredIdentityContext.readFromAuthenticationSession(
authSession, "BROKERED_CONTEXT");我得到的错误是:
20:05:03,844 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-6) Uncaught server error: java.lang.NoClassDefFoundError: org/keycloak/authentication/authenticators/broker/util/SerializedBrokeredIdentityContext发布于 2019-09-04 22:57:12
因为wildfly隔离了类加载器,所以我必须在META-INF/MANIFEST.MF文件中声明依赖项。
为此,我在pom.xml文件中添加了以下代码:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Dependencies>org.keycloak.keycloak-services</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>(在keycloak用户列表上给了我解决方案:https://lists.jboss.org/pipermail/keycloak-user/2019-September/019108.html)
发布于 2021-01-28 17:10:15
使用Gradle做与@Christophe de Vienne相同的事情:
build.gradle
configurations {
bundleLib
}
dependencies {
//...
compile "org.keycloak:keycloak-services:$keycloakVersion"
}
jar {
from {
configurations.bundleLib.collect { it.isDirectory() ? it : zipTree(it) }
}
manifest {
attributes(
'Dependencies' : "org.keycloak.keycloak-services"
)
}
}https://stackoverflow.com/questions/57778240
复制相似问题