refactor: plugin resource loading to only load from plugin itself instead of delegating to core (#4663)

#### What type of PR is this?
/kind improvement
/area core
/area plugin
/milestone 2.10.x

#### What this PR does / why we need it:
重构插件类加载器以优化当插件的 resources 目录资源与 Halo 中同名时加载不到的问题

how to test it?
1. 在创建的 resources/extensions 目录创建一个与 halo 的 resources/extensions 目录中已存在的同名 yaml
2. 使用插件观察插件的同名文件 yaml 是否被 apply 到 halo 中
3. 测试插件的其他功能是否正常比如静态资源加载如 logo 等

#### Which issue(s) this PR fixes:
Fixes #4610

#### Does this PR introduce a user-facing change?
```release-note
重构插件类加载器以优化当插件的 resources 目录资源与 Halo 中同名时加载不到的问题
```
pull/4527/head^2
guqing 2023-09-27 20:46:16 +08:00 committed by GitHub
parent e119b63a94
commit 86db26a96f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 19 deletions

View File

@ -10,14 +10,12 @@ import java.nio.file.Path;
import java.time.Instant;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.pf4j.ClassLoadingStrategy;
import org.pf4j.CompoundPluginLoader;
import org.pf4j.CompoundPluginRepository;
import org.pf4j.DefaultPluginRepository;
import org.pf4j.DevelopmentPluginLoader;
import org.pf4j.JarPluginLoader;
import org.pf4j.JarPluginRepository;
import org.pf4j.PluginClassLoader;
import org.pf4j.PluginDescriptor;
import org.pf4j.PluginLoader;
import org.pf4j.PluginManager;
@ -111,17 +109,7 @@ public class PluginAutoConfiguration {
} else {
return new CompoundPluginLoader()
.add(createDevelopmentPluginLoader(this), this::isDevelopment)
.add(new JarPluginLoader(this) {
@Override
public ClassLoader loadPlugin(Path pluginPath,
PluginDescriptor pluginDescriptor) {
PluginClassLoader pluginClassLoader =
new PluginClassLoader(pluginManager, pluginDescriptor,
getClass().getClassLoader(), ClassLoadingStrategy.APD);
pluginClassLoader.addFile(pluginPath.toFile());
return pluginClassLoader;
}
});
.add(new JarPluginLoader(this));
}
}
@ -156,12 +144,6 @@ public class PluginAutoConfiguration {
DevelopmentPluginLoader createDevelopmentPluginLoader(PluginManager pluginManager) {
return new DevelopmentPluginLoader(pluginManager) {
@Override
protected PluginClassLoader createPluginClassLoader(Path pluginPath,
PluginDescriptor pluginDescriptor) {
return new PluginClassLoader(pluginManager, pluginDescriptor,
getClass().getClassLoader(), ClassLoadingStrategy.APD);
}
@Override
public ClassLoader loadPlugin(Path pluginPath,