commit
2d538c7867
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>org.jcnc</groupId>
|
<groupId>org.jcnc</groupId>
|
||||||
<artifactId>JNotepad</artifactId>
|
<artifactId>JNotepad</artifactId>
|
||||||
<version>1.1.3-bate</version>
|
<version>1.1.3-beta</version>
|
||||||
<name>JNotepad</name>
|
<name>JNotepad</name>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
|||||||
@ -102,6 +102,8 @@ public class LunchApp extends Application {
|
|||||||
// 刷新插件配置文件
|
// 刷新插件配置文件
|
||||||
instance.getConfig().setPlugins(PluginManager.getInstance().getPluginInfos());
|
instance.getConfig().setPlugins(PluginManager.getInstance().getPluginInfos());
|
||||||
instance.writeConfig();
|
instance.writeConfig();
|
||||||
|
// 销毁插件可能申请的资源
|
||||||
|
PluginManager.getInstance().destroyPlugins();
|
||||||
// 关闭线程池
|
// 关闭线程池
|
||||||
threadPool.shutdownNow();
|
threadPool.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package org.jcnc.jnotepad.plugin;
|
package org.jcnc.jnotepad.plugin;
|
||||||
|
|
||||||
|
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
|
||||||
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
||||||
import org.jcnc.jnotepad.exception.AppException;
|
import org.jcnc.jnotepad.exception.AppException;
|
||||||
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
|
||||||
@ -13,6 +14,7 @@ import java.lang.reflect.InvocationTargetException;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.jar.JarEntry;
|
import java.util.jar.JarEntry;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
@ -24,6 +26,8 @@ import java.util.zip.ZipEntry;
|
|||||||
*/
|
*/
|
||||||
public class PluginLoader {
|
public class PluginLoader {
|
||||||
private static final PluginLoader INSTANCE = new PluginLoader();
|
private static final PluginLoader INSTANCE = new PluginLoader();
|
||||||
|
|
||||||
|
private static final ExecutorService THREAD_POOL = ThreadPoolManager.getThreadPool();
|
||||||
Logger logger = LogUtil.getLogger(this.getClass());
|
Logger logger = LogUtil.getLogger(this.getClass());
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,9 +68,14 @@ public class PluginLoader {
|
|||||||
* @since 2023/9/16 14:04
|
* @since 2023/9/16 14:04
|
||||||
*/
|
*/
|
||||||
private static boolean checkPlugin(List<PluginDescriptor> configPluginDescriptors, PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
private static boolean checkPlugin(List<PluginDescriptor> configPluginDescriptors, PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
||||||
// 如果应用程序配置文件为空则默认插件被禁用
|
// 如果应用程序配置文件中没有该插件则默认禁用
|
||||||
if (configPluginDescriptors.isEmpty()) {
|
if (pluginDoesNotExist(pluginDescriptor, configPluginDescriptors)) {
|
||||||
return disabledByDefault(configPluginDescriptors, pluginDescriptor, pluginDescriptors);
|
disabledByDefault(configPluginDescriptors, pluginDescriptor, pluginDescriptors);
|
||||||
|
THREAD_POOL.submit(() -> {
|
||||||
|
PluginConfigController.getInstance().writeConfig();
|
||||||
|
ThreadPoolManager.threadContSelfSubtracting();
|
||||||
|
});
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
// 如果应用程序配置文件中该插件禁用则不加载
|
// 如果应用程序配置文件中该插件禁用则不加载
|
||||||
for (PluginDescriptor configPluginDescriptor : configPluginDescriptors) {
|
for (PluginDescriptor configPluginDescriptor : configPluginDescriptors) {
|
||||||
@ -78,6 +87,24 @@ public class PluginLoader {
|
|||||||
return loaded(pluginDescriptor, pluginDescriptors);
|
return loaded(pluginDescriptor, pluginDescriptors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 插件不存在
|
||||||
|
*
|
||||||
|
* @param pluginDescriptor 插件描述类
|
||||||
|
* @param configPluginDescriptors 配置文件插件信息集合
|
||||||
|
* @return boolean 插件不存在
|
||||||
|
* @apiNote
|
||||||
|
* @since 2023/9/19 19:16
|
||||||
|
*/
|
||||||
|
private static boolean pluginDoesNotExist(PluginDescriptor pluginDescriptor, List<PluginDescriptor> configPluginDescriptors) {
|
||||||
|
for (PluginDescriptor configPluginDescriptor : configPluginDescriptors) {
|
||||||
|
if ((configPluginDescriptor.getName() + configPluginDescriptor.getAuthor()).equals(pluginDescriptor.getName() + pluginDescriptor.getAuthor())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean loaded(PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
private static boolean loaded(PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
||||||
Iterator<PluginDescriptor> iterator = pluginDescriptors.iterator();
|
Iterator<PluginDescriptor> iterator = pluginDescriptors.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
@ -98,6 +125,16 @@ public class PluginLoader {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果插件被禁用则不加载
|
||||||
|
*
|
||||||
|
* @param pluginDescriptor 插件描述类
|
||||||
|
* @param pluginDescriptors 插件描述类集合
|
||||||
|
* @param configPluginDescriptor 配置文件插件信息
|
||||||
|
* @return boolean
|
||||||
|
* @apiNote
|
||||||
|
* @since 2023/9/19 18:45
|
||||||
|
*/
|
||||||
private static boolean disableDoNotLoad(PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors, PluginDescriptor configPluginDescriptor) {
|
private static boolean disableDoNotLoad(PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors, PluginDescriptor configPluginDescriptor) {
|
||||||
if ((configPluginDescriptor.getName() + configPluginDescriptor.getAuthor()).equals(pluginDescriptor.getName() + pluginDescriptor.getAuthor()) && !configPluginDescriptor.isEnabled()) {
|
if ((configPluginDescriptor.getName() + configPluginDescriptor.getAuthor()).equals(pluginDescriptor.getName() + pluginDescriptor.getAuthor()) && !configPluginDescriptor.isEnabled()) {
|
||||||
pluginDescriptor.setEnabled(false);
|
pluginDescriptor.setEnabled(false);
|
||||||
@ -107,12 +144,19 @@ public class PluginLoader {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean disabledByDefault(List<PluginDescriptor> configPluginDescriptors, PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
/**
|
||||||
|
* 默认禁用
|
||||||
|
*
|
||||||
|
* @param configPluginDescriptors 配置文件插件信息
|
||||||
|
* @param pluginDescriptor 插件描述类
|
||||||
|
* @param pluginDescriptors 插件描述类集合
|
||||||
|
* @apiNote
|
||||||
|
* @since 2023/9/19 18:48
|
||||||
|
*/
|
||||||
|
private static void disabledByDefault(List<PluginDescriptor> configPluginDescriptors, PluginDescriptor pluginDescriptor, List<PluginDescriptor> pluginDescriptors) {
|
||||||
pluginDescriptor.setEnabled(false);
|
pluginDescriptor.setEnabled(false);
|
||||||
pluginDescriptors.add(pluginDescriptor);
|
pluginDescriptors.add(pluginDescriptor);
|
||||||
configPluginDescriptors.add(pluginDescriptor);
|
configPluginDescriptors.add(pluginDescriptor);
|
||||||
PluginConfigController.getInstance().writeConfig();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -128,7 +172,7 @@ public class PluginLoader {
|
|||||||
/**
|
/**
|
||||||
* 根据文件加载插件
|
* 根据文件加载插件
|
||||||
*
|
*
|
||||||
* @param pluginJar 插件jar包
|
* @param pluginJar 插件jar包
|
||||||
* @param configPluginDescriptors 配置文件插件信息集合
|
* @param configPluginDescriptors 配置文件插件信息集合
|
||||||
* @apiNote
|
* @apiNote
|
||||||
* @since 2023/9/16 14:05
|
* @since 2023/9/16 14:05
|
||||||
|
|||||||
@ -136,6 +136,17 @@ public class PluginManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 销毁插件可能申请的资源
|
||||||
|
*/
|
||||||
|
public void destroyPlugins() {
|
||||||
|
for (PluginDescriptor pluginDescriptor : pluginDescriptors) {
|
||||||
|
if (pluginDescriptor.isEnabled()) {
|
||||||
|
pluginDescriptor.getPlugin().destroyed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取按类别分类的已加载插件
|
* 获取按类别分类的已加载插件
|
||||||
*
|
*
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user