尝试为 Keycloak 创建自定义身份验证器提供程序时,来自 Maven 部署的 NoClassDefFoundError
NoClassDefFoundError from Maven deploy when attempting to create a custom authenticator provider for Keycloak
我正在实施一个 Keycloak 身份验证提供程序(适用于 Keycloak 6.0.1),当用户暂时锁定时 returns 一条消息(如指定的
)
当我这样做时 mvn clean install wildfly:deploy
我得到:
[ERROR] Caused by: java.util.ServiceConfigurationError: org.keycloak.authentication.AuthenticatorFactory: Provider com.mumba.cloud.authenticator.LockedUserAuthenticatorFactory could not be instantiated
[ERROR] Caused by: java.lang.NoClassDefFoundError: Failed to link com/mumba/cloud/authenticator/LockedUserAuthenticator (Module \"deployment.lockeduser-authenticator-1.0-SNAPSHOT.jar\" from Service Module Loader): org/keycloak/authentication/authenticators/browser/UsernamePasswordForm"}}}}
我正在寻求一些帮助,了解如何追踪我得到 java.lang.NoClassDefFoundError 的原因以及为什么 Maven(或者可能是 wildfly)似乎找不到 org/keycloak/authentication/authenticators/browser/UsernamePasswordForm
这不是编译时错误,我相信我下面的 import 语句对于 UsernamePasswordForm 是正确的(见下面的代码)。
我还认为我已将依赖项 (keycloak-services) 正确添加到我的 pom.xml(见下文)。
我对 Maven(和 Java/Keycloak 开发)还很陌生,所以我不确定到哪里去寻找它。
有人指点一下吗?
package com.mumba.cloud.authenticator;
import org.keycloak.authentication.authenticators.browser.UsernamePasswordForm;
public class LockedUserAuthenticator extends UsernamePasswordForm {
@Override
protected String tempDisabledError() {
return "ACCOUNT IS temporarily disabled.";
}
}
我的 pom.xml 包括:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<keycloak-version>6.0.1</keycloak-version>
<maven.test.skip>true</maven.test.skip>
</properties>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${keycloak-version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak-version}</version>
</dependency>
...
您需要添加显式依赖项以避免 class-在运行时加载问题。
这是您需要添加到 pom.xml
:
中的内容
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- This is required since we need to add the jboss module references
to the resulting jar -->
<manifestEntries>
<!-- Adding explicit dependencies to avoid class-loading issues at runtime -->
<Dependencies>
<![CDATA[org.keycloak.keycloak-core,org.keycloak.keycloak-services]]></Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
此外,将范围 provided
添加到您的依赖项中,如下所示:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>
我正在实施一个 Keycloak 身份验证提供程序(适用于 Keycloak 6.0.1),当用户暂时锁定时 returns 一条消息(如指定的
当我这样做时 mvn clean install wildfly:deploy
我得到:
[ERROR] Caused by: java.util.ServiceConfigurationError: org.keycloak.authentication.AuthenticatorFactory: Provider com.mumba.cloud.authenticator.LockedUserAuthenticatorFactory could not be instantiated
[ERROR] Caused by: java.lang.NoClassDefFoundError: Failed to link com/mumba/cloud/authenticator/LockedUserAuthenticator (Module \"deployment.lockeduser-authenticator-1.0-SNAPSHOT.jar\" from Service Module Loader): org/keycloak/authentication/authenticators/browser/UsernamePasswordForm"}}}}
我正在寻求一些帮助,了解如何追踪我得到 java.lang.NoClassDefFoundError 的原因以及为什么 Maven(或者可能是 wildfly)似乎找不到 org/keycloak/authentication/authenticators/browser/UsernamePasswordForm
这不是编译时错误,我相信我下面的 import 语句对于 UsernamePasswordForm 是正确的(见下面的代码)。
我还认为我已将依赖项 (keycloak-services) 正确添加到我的 pom.xml(见下文)。
我对 Maven(和 Java/Keycloak 开发)还很陌生,所以我不确定到哪里去寻找它。
有人指点一下吗?
package com.mumba.cloud.authenticator;
import org.keycloak.authentication.authenticators.browser.UsernamePasswordForm;
public class LockedUserAuthenticator extends UsernamePasswordForm {
@Override
protected String tempDisabledError() {
return "ACCOUNT IS temporarily disabled.";
}
}
我的 pom.xml 包括:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<keycloak-version>6.0.1</keycloak-version>
<maven.test.skip>true</maven.test.skip>
</properties>
<dependencies>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-core</artifactId>
<version>${keycloak-version}</version>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak-version}</version>
</dependency>
...
您需要添加显式依赖项以避免 class-在运行时加载问题。
这是您需要添加到 pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- This is required since we need to add the jboss module references
to the resulting jar -->
<manifestEntries>
<!-- Adding explicit dependencies to avoid class-loading issues at runtime -->
<Dependencies>
<![CDATA[org.keycloak.keycloak-core,org.keycloak.keycloak-services]]></Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
此外,将范围 provided
添加到您的依赖项中,如下所示:
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<version>${keycloak.version}</version>
<scope>provided</scope>
</dependency>