private void loadPluginDefinition() throws IOException {
        File[] files = pluginDirectory.listFiles();
        if (files == null) {
            log.warn("plugin directory {} has no files", pluginDirectory);
            return;
        }

        List<PluginDefinition> definitions = new ArrayList<>();
        for (File jarFile : files) {
            String jarName = jarFile.getName();
            if (!jarName.endsWith(".jar") || !jarName.contains("plugins-base")) {
                log.warn("invalid plugin jar {}, skip to load", jarFile);
                continue;
            }

            log.info("start to load valid plugin jar {}", jarFile);
            JarFile pluginJar = new JarFile(jarFile);
            String pluginDef = readPluginDef(pluginJar);
            pluginDef = pluginDef.replaceAll("[\\x00]+", "");
            PluginDefinition definition = YAML_MAPPER.readValue(pluginDef, PluginDefinition.class);

            if (osName.startsWith(WINDOWS_PREFIX)) {
                super.addURL(new URL("file:///" + jarFile.getAbsolutePath()));
            } else {
                super.addURL(new URL("file://" + jarFile.getAbsolutePath()));
            }
            checkPluginValid(jarFile, definition);
            definitions.add(definition);
        }

        pluginDefinitionMap = definitions.stream()
                .collect(Collectors.toMap(PluginDefinition::getName, definition -> definition));
    }
load pluginDefinition in **.jar/META-INF/plugin.yaml
inlong-manager/manager-service/src/main/java/org/apache/inlong/manager/service/plugin/PluginClassLoader.java