Unable to run twilio

I am trying to install twilio for phone authentication, however this is not working

14:47:58,803 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: java.lang.NoClassDefFoundError: com/twilio/Twilio
	at deployment.keycloakauthenticator-1.0-SNAPSHOT.jar//com.gitlab.name.keycloakauthenticator.rest.TwilioProvider.<init>(TwilioProvider.java:13)
	at deployment.keycloakauthenticator-1.0-SNAPSHOT.jar//com.gitlab.name.keycloakauthenticator.PhoneVerificationRestProvider.getResource(PhoneVerificationRestProvider.java:17)
	at org.keycloak.keycloak-services@13.0.1//org.keycloak.services.resources.RealmsResource.resolveRealmExtension(RealmsResource.java:283)

....

This is my pom with Twilio:

        <dependency>
            <groupId>com.twilio.sdk</groupId>
            <artifactId>twilio</artifactId>
            <version>8.14.0</version>
        </dependency>

UPDATE:

I have tried to add it to the jar plugin but I have this error which is not really useful:

15:16:03,106 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3) MSC000001: Failed to start service jboss.module.service."deployment.keycloakauthenticator-1.0-SNAPSHOT.jar".main: org.jboss.msc.service.StartException in service jboss.module.service."deployment.keycloakauthenticator-1.0-SNAPSHOT.jar".main: WFLYSRV0179: Failed to load module: deployment.keycloakauthenticator-1.0-SNAPSHOT.jar
	at org.jboss.as.server@15.0.1.Final//org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:116)
	at org.jboss.msc@1.4.12.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1739)
	at org.jboss.msc@1.4.12.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1701)
	at org.jboss.msc@1.4.12.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1559)
	at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
	at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
	at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.jboss.modules.ModuleNotFoundException: com.twilio.sdk.twilio
	at org.jboss.modules.Module.addPaths(Module.java:1288)
	at org.jboss.modules.Module.link(Module.java:1644)
	at org.jboss.modules.Module.relinkIfNecessary(Module.java:1672)
	at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:303)
	at org.jboss.modules.ModuleLoader.loadModule(ModuleLoader.java:287)
	at org.jboss.as.server@15.0.1.Final//org.jboss.as.server.moduleservice.ModuleLoadService.start(ModuleLoadService.java:93)
	... 8 more

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.2.0</version>
                <configuration>
                    <archive>
                        <manifestEntries>
                            <Dependencies>org.keycloak.keycloak-services, com.twilio.sdk.twilio</Dependencies>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

I have tried com.twilio.sdk, com.twilio, com.twilio.Twilio, com.twilio.sdk.twilio, but nothing…

The Twilio dependency is not available (as far as Wildfly sees the world). However, there are multiple options to provide it to Wildfly.

  1. You could create a jboss module for the Twilio library and deploy it to the $KEYCLOAK_HOME/modules/base/… folder and reference it with a custom jboss-deployment-structure.xml file from your .jar. Then, you can configure the Twilio dependency as “provided” in your pom.xml like other libraries shipped with Wildfly. (Wildfly docs: http://docs.wildfly.org/)
  2. Another option would be to use the maven-shade plugin to repackage the Twilio library (including transitive dependencies) in your extension jar. (see GitHub - sangyoon-lee/keycloak-sms-authenticator (not updated for some time), but works for me after updating (GitHub - srose/keycloak-sms-authenticator))
  3. If all else fails, you could deploy your extension as a classic .ear archive with the libraries embedded.
3 Likes