https://github.com/yakami129/pf4j-demo
集成pf4j插件框架demo
https://github.com/yakami129/pf4j-demo
pf4j plugins
Last synced: 7 months ago
JSON representation
集成pf4j插件框架demo
- Host: GitHub
- URL: https://github.com/yakami129/pf4j-demo
- Owner: yakami129
- License: apache-2.0
- Created: 2023-05-16T13:28:27.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-05-17T07:43:25.000Z (over 2 years ago)
- Last Synced: 2025-01-18T02:13:44.451Z (9 months ago)
- Topics: pf4j, plugins
- Language: Java
- Homepage:
- Size: 22.5 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pf4j-demo
这是一个集成pf4j插件框架demo
# 项目结构说明
- pf4j-api: 定义插件接口
- plugins: 插件具体实现
- testing: 测试插件方法,运行的插件需要存放在resources/plugins中,可以将testing中的代码copy到项目中,用于执行插件
- build: plugins中的插件build后,会产生插件的zip包,存放在该目录中在使用的过程中,为了避免不必要的问题,请严格安装上述项目结构扩展。
# 快速开始
### (1)在pf4j-api中定义GetHttpPlugin插件接口
```java
public interface GetHttp extends ExtensionPoint {/**
* 发送Get请求
*
* @param getHttpRequestDTO 请求信息
* @return 请求结果
*/
String get(GetHttpRequestDTO getHttpRequestDTO);}
```注意:
1. 所有的插件接口,必须继承ExtensionPoint
2. 根据需求可以定义多个方法### (2)在plugins中实现getHttp-plugin插件
- 编写getHttp-plugin插件实现代码
```java
public class GetHttpPlugin extends Plugin {private static final Logger logger = LoggerFactory.getLogger(GetHttpPlugin.class);
public GetHttpPlugin(PluginWrapper wrapper) {
super(wrapper);
}@Override
public void start() {
logger.info("[PLUGIN] start GetHttpPlugin");
}@Override
public void stop() {
logger.info("[PLUGIN] stop GetHttpPlugin");
}@Extension
public static class GetHttpPluginImpl implements GetHttp {
@Override
public String get(GetHttpRequestDTO getHttpRequestDTO) {
final String responseBody = HttpUtil.get(getHttpRequestDTO.getUrl());
return responseBody;
}
}
}
```
- 在gradle.properties设置插件信息,非常重要!!!
```
## 插件版本号
version=1.0.0
## 插件ID,在调用插件的时候会使用
pluginId=gethttp-plugin
## 插件的执行类
pluginClass=io.github.yakami129.plugin.GetHttpPlugin
## 插件的作者相关信息
pluginProvider=yakami129
pluginDependencies=
```
- 设置disabled.txt和enabled.txt
```
disabled.txt:用于控制哪些插件默认是关闭的
enabled.txt:用于控制哪些插件默认是开启的
```
###(3)在项目根目录打包插件```shell
gradle build -x test
```###(4)测试getHttp-plugin插件
- 将打包好的插件copy到testing中
```shell
cp build/plugins/gethttp-plugin-1.0.0.zip testing/src/main/resources/plugins
```- 执行getHttp-plugin插件
```java
@Slf4j
public class PluginMain {public static void main(String[] args) {
// 初始化plugin的配置
PluginProperties pluginProperties = new PluginProperties();
final String pluginsUrl = ClassLoader.getSystemResource("plugins").getPath();
log.info("pluginsUrl:{}", pluginsUrl);
pluginProperties.setPluginPath(pluginsUrl);// 扫描plugin包,获取插件管理器
PluginManagerScanner pluginManagerScanner = new PluginManagerScanner(pluginProperties);
final PluginManager pluginManager = pluginManagerScanner.getPluginManager();// 初始化插件管理器服务,用于业务操作
PluginManagerService pluginManagerService = new PluginManagerService(pluginManager);// 执行GetHttp插件
final GetHttp getHttp = pluginManagerService.getExtensions(GetHttp.class, "gethttp-plugin");
final String responseBody = getHttp.get(new GetHttpRequestDTO("www.baidu.com"));
log.info("responseBody:{}", responseBody);
}}
```