{"record":{"id":"9307e52d489caba9","repo":"alibaba/canal","slug":"load-extension-jar-failed","errorCode":null,"errorMessage":"load extension jar failed!","messagePattern":"load extension jar failed!","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java","lineNumber":282,"sourceCode":"\n        // 1. plugin folder，customized extension classLoader （jar_dir/plugin）\n        String dir = File.separator + this.getJarDirectoryPath() + File.separator + \"plugin\";\n\n        File externalLibDir = new File(dir);\n        if (!externalLibDir.exists()) {\n            externalLibDir = new File(File.separator + this.getJarDirectoryPath() + File.separator + \"canal-adapter\"\n                                      + File.separator + \"plugin\");\n        }\n        logger.info(\"extension classpath dir: \" + externalLibDir.getAbsolutePath());\n        if (externalLibDir.exists()) {\n            File[] files = externalLibDir.listFiles((dir1, name) -> name.endsWith(\".jar\"));\n            if (files != null) {\n                for (File f : files) {\n                    URL url;\n                    try {\n                        url = f.toURI().toURL();\n                    } catch (MalformedURLException e) {\n                        throw new RuntimeException(\"load extension jar failed!\", e);\n                    }\n\n                    ClassLoader parent = Thread.currentThread().getContextClassLoader();\n                    URLClassLoader localClassLoader;\n                    if (classLoaderPolicy == null || \"\".equals(classLoaderPolicy)\n                        || DEFAULT_CLASSLOADER_POLICY.equalsIgnoreCase(classLoaderPolicy)) {\n                        localClassLoader = new URLClassExtensionLoader(new URL[] { url });\n                    } else {\n                        localClassLoader = new URLClassLoader(new URL[] { url }, parent);\n                    }\n\n                    loadFile(extensionClasses, CANAL_DIRECTORY, localClassLoader);\n                    loadFile(extensionClasses, SERVICES_DIRECTORY, localClassLoader);\n                }\n            }\n        }\n        // 只加载外部spi, 不加载classpath\n        // 2. load inner extension class with default classLoader","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java#L264-L300","documentation":"Error \"load extension jar failed!\" thrown in alibaba/canal.","triggerScenarios":"Thrown at client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java:282 when the library encounters an invalid state.","commonSituations":"Failed to load an extension jar. Check the jar path, readability, and that it does not conflict with already-loaded classes; fail startup rather than running with partial plugins.","solutions":["Verify the extension jar path exists and is readable by the adapter launcher process.","Check the jar is a valid, non-corrupted file and compatible with the running JVM version."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}