Wrong "optional" dependency in jakarta.websocket-api Maven artifact
Since https://github.com/jakartaee/websocket/issues/180 the Maven artifact of jakarta.websocket-api lists jakarta.websocket-client-api as an optional "provided" dependency. With this setup the following code does not compile, although dependencies are defined correctly:
Compiling the following class:
import jakarta.websocket.server.ServerEndpointConfig;
public class Server {
public String registerWebsocketEndpoint(ServerEndpointConfig serverEndpointConfig)
{
return serverEndpointConfig.getPath();
}
}
with a dependency on:
dependencies {
api 'jakarta.websocket:jakarta.websocket-api:2.2.0'
// PROBLEM: this is needed to compile but should be included transitively
// implementation 'jakarta.websocket:jakarta.websocket-client-api:2.2.0'
}
will fail with:
error: cannot access EndpointConfig
return serverEndpointConfig.getPath();
^
class file for jakarta.websocket.EndpointConfig not found
Either "jakarta.websocket-client-api" should be a transitive compile dependency or EndpointConfig should not be part of the "client-api" artifact since it is needed to compile server related classes.
I have attached a simple example reproducing the issue: jakarta-websocket-dependencies.zip
With the refactoring of the JAR contents to avoid duplication of classes, the issue described in #180 should no longer occur. Therefore, the fix is no longer required. EndpointConfig belongs in the client-api JAR so I think the fix here is to remove the provided scope so this becomes a default compile scope dependency.
Fixed in 2.2.x and master (2.3.x).
There should be a 2.2.1-SNAPSHOT available for you to test at: https://jakarta.oss.sonatype.org/content/repositories/snapshots/jakarta/websocket/