首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用来自org.keycloak.authentication.authenticators.broker.util的类时,提供者jar中的NoClassDefFoundError

使用来自org.keycloak.authentication.authenticators.broker.util的类时,提供者jar中的NoClassDefFoundError
EN

Stack Overflow用户
提问于 2019-09-04 04:19:01
回答 2查看 3.4K关注 0票数 4

我正在为keycloak编写一个验证器提供程序,我将其打包为.jar。一旦它使用了来自keycloak-services的类,我就会得到一个NoClassDefFoundError。当通过"mvn wildfly:deploy“部署提供程序时,我得到了相同的错误。

我肯定遗漏了什么,但我很少做java代码,而且在这一点上我一无所知。

我在pom.xml中定义了依赖项,并尝试了'provided‘和'compile’作为作用域:

代码语言:javascript
复制
    <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>

一旦我将以下代码添加到身份验证函数中,我就会得到错误:

代码语言:javascript
复制
    AuthenticationSessionModel authSession = context.getAuthenticationSession();
    SerializedBrokeredIdentityContext serializedCtx =
        SerializedBrokeredIdentityContext.readFromAuthenticationSession(
            authSession, "BROKERED_CONTEXT");

我得到的错误是:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2019-09-04 22:57:12

因为wildfly隔离了类加载器,所以我必须在META-INF/MANIFEST.MF文件中声明依赖项。

为此,我在pom.xml文件中添加了以下代码:

代码语言:javascript
复制
            <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)

票数 16
EN

Stack Overflow用户

发布于 2021-01-28 17:10:15

使用Gradle做与@Christophe de Vienne相同的事情:

build.gradle

代码语言:javascript
复制
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"
        )
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57778240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档