private ClassLoader getCustomClassloader()

in seatunnel-datasource/seatunnel-datasource-client/src/main/java/org/apache/seatunnel/datasource/AbstractDataSourceClient.java [223:279]


    private ClassLoader getCustomClassloader(String pluginName) {
        String getenv =
                System.getenv(ST_WEB_BASEDIR_PATH) == null
                        ? System.getProperty(ST_WEB_BASEDIR_PATH)
                        : System.getenv(ST_WEB_BASEDIR_PATH);
        log.info("ST_WEB_BASEDIR_PATH is : " + getenv);
        String libPath = StringUtils.isEmpty(getenv) ? "/datasource" : (getenv + "/datasource");

        File jarDirectory = new File(libPath);
        File[] jarFiles =
                jarDirectory.listFiles(
                        (dir, name) -> {
                            String pluginUpperCase = pluginName.toUpperCase();
                            String nameLowerCase = name.toLowerCase();
                            if (pluginUpperCase.equals("KAFKA")) {
                                return !nameLowerCase.contains("kingbase")
                                        && nameLowerCase.startsWith(
                                                DatasourceLoadConfig.classLoaderJarName.get(
                                                        pluginUpperCase));
                            } else {
                                return nameLowerCase.startsWith(
                                        DatasourceLoadConfig.classLoaderJarName.get(
                                                pluginUpperCase));
                            }
                        });

        log.info("jar file length :" + (jarFiles == null ? 0 : jarFiles.length));
        log.info(
                "jar file name :"
                        + (jarFiles == null
                                ? 0
                                : jarFiles.length == 0 ? "no jar" : jarFiles[0].getName()));
        DatasourceClassLoader customClassLoader =
                DatasourceLoadConfig.datasourceClassLoaders.get(pluginName.toUpperCase());
        try {
            if (customClassLoader == null) {
                jarFiles = jarFiles == null ? new File[0] : jarFiles;
                URL[] urls = new URL[jarFiles.length];
                for (int i = 0; i < jarFiles.length; i++) {
                    try {
                        urls[i] = jarFiles[i].toURI().toURL();
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                }
                customClassLoader =
                        new DatasourceClassLoader(
                                urls, Thread.currentThread().getContextClassLoader());
                DatasourceLoadConfig.datasourceClassLoaders.put(
                        pluginName.toUpperCase(), customClassLoader);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        log.info("custom loader is:" + customClassLoader);
        return customClassLoader;
    }