diff --git a/cli/ballerina-cli/src/main/java/io/ballerina/cli/launcher/CustomToolClassLoader.java b/cli/ballerina-cli/src/main/java/io/ballerina/cli/launcher/CustomToolClassLoader.java index 6869c8361663..6849a8c462ce 100644 --- a/cli/ballerina-cli/src/main/java/io/ballerina/cli/launcher/CustomToolClassLoader.java +++ b/cli/ballerina-cli/src/main/java/io/ballerina/cli/launcher/CustomToolClassLoader.java @@ -46,8 +46,13 @@ protected Class loadClass(String name, boolean resolve) throws ClassNotFoundE Class loadedClass = findLoadedClass(name); if (loadedClass == null) { try { - // First, try to load the class from the URLs - loadedClass = findClass(name); + // Load from parent if cli or picocli classes. This is to avoid SPI and class loading issues + if (name.startsWith("io.ballerina.cli") || name.startsWith("picocli")) { + loadedClass = super.loadClass(name, resolve); + } else { + // First, try to load the class from the URLs + loadedClass = findClass(name); + } } catch (ClassNotFoundException e) { try { // If not found, delegate to the parent