diff --git a/spring-brick-common/src/main/java/com/gitee/starblues/common/Constants.java b/spring-brick-common/src/main/java/com/gitee/starblues/common/Constants.java index 2151f6cc2a0eb2bd4c0cbf6dec752b41500c1cb4..481b524d2f5180a2abc6736b6761b17746fc1720 100644 --- a/spring-brick-common/src/main/java/com/gitee/starblues/common/Constants.java +++ b/spring-brick-common/src/main/java/com/gitee/starblues/common/Constants.java @@ -16,6 +16,8 @@ package com.gitee.starblues.common; +import java.io.File; + /** * 静态常量 * @author starBlues diff --git a/spring-brick-common/src/main/java/com/gitee/starblues/utils/FilesUtils.java b/spring-brick-common/src/main/java/com/gitee/starblues/utils/FilesUtils.java index 34b06d33ba6ada2cc2a8570745c77fe5cdfd992b..a057e15315fe473cfbe229a9506dab30de48e5c1 100644 --- a/spring-brick-common/src/main/java/com/gitee/starblues/utils/FilesUtils.java +++ b/spring-brick-common/src/main/java/com/gitee/starblues/utils/FilesUtils.java @@ -17,6 +17,7 @@ package com.gitee.starblues.utils; import com.gitee.starblues.common.Constants; +import com.gitee.starblues.common.PackageStructure; import java.io.File; import java.io.IOException; @@ -25,7 +26,8 @@ import java.io.IOException; * 文件工具类 * * @author starBlues - * @version 3.0.2 + * @since 3.0.0 + * @version 3.1.0 */ public class FilesUtils { @@ -43,14 +45,69 @@ public class FilesUtils { return null; } + /** + * 是否存在文件 + * @param path 文件路径 + * @return boolean + */ + public static boolean existFile(String path){ + if(ObjectUtils.isEmpty(path)){ + return false; + } + return new File(path).exists(); + } + /** * 拼接file路径 * * @param paths 拼接的路径 * @return 拼接的路径 + * @since 3.0.0 */ - public static String joiningFilePath(String ...paths){ + public static String joiningFilePath(String ...paths) { + if (paths == null || paths.length == 0) { + return ""; + } + StringBuilder stringBuilder = new StringBuilder(); + int length = paths.length; + for (int i = 0; i < length; i++) { + String path = paths[i]; + if (ObjectUtils.isEmpty(path)) { + continue; + } + if (i < length - 1) { + if (path.endsWith("/")) { + path = path.replace("/", ""); + } else if (path.endsWith("\\")) { + path = path.replace("\\", ""); + } else if (path.endsWith("//")) { + path = path.replace("//", ""); + } + } + if (i > 0) { + if (path.startsWith(File.separator) || path.startsWith("/") || + path.startsWith("\\") || path.startsWith("//")) { + stringBuilder.append(path); + } else { + stringBuilder.append(File.separator).append(path); + } + } else { + stringBuilder.append(path); + } + } + + return stringBuilder.toString(); + } + + /** + * 拼接 zip /jar 路径 + * + * @param paths 拼接的路径 + * @return 拼接的路径 + * @since 3.1.0 + */ + public static String joiningZipPath(String ...paths){ if(paths == null || paths.length == 0){ return ""; } @@ -61,12 +118,20 @@ public class FilesUtils { if(ObjectUtils.isEmpty(path)) { continue; } + if(i < length - 1){ + if(path.endsWith("/")){ + path = path.replace("/", ""); + } else if(path.endsWith("\\")){ + path = path.replace("\\", ""); + } else if(path.endsWith("//")){ + path = path.replace("//", ""); + } + } if(i > 0){ - if(path.startsWith(File.separator) || path.startsWith("/") || - path.startsWith("\\") || path.startsWith("//")){ + if(path.startsWith(PackageStructure.SEPARATOR)){ stringBuilder.append(path); } else { - stringBuilder.append(File.separator).append(path); + stringBuilder.append(PackageStructure.SEPARATOR).append(path); } } else { stringBuilder.append(path); @@ -79,6 +144,9 @@ public class FilesUtils { public static File createFile(String path) throws IOException { try { File file = new File(path); + if(file.exists()){ + return file; + } File parentFile = file.getParentFile(); if(!parentFile.exists()){ if(!parentFile.mkdirs()){ diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/prod/ZipProdRepackager.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/prod/ZipProdRepackager.java index 303fd54ad009a6e8211ca4128b123607fcf894d9..55ca1548b9a9ccdfe3620300e10dc76bc479cf70 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/prod/ZipProdRepackager.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/prod/ZipProdRepackager.java @@ -174,8 +174,10 @@ public class ZipProdRepackager extends DevRepackager { if(filterArtifact(artifact)){ continue; } - String dependencyIndexName = packageZip.writeDependency(artifact.getFile(), libDirEntryName); - dependencyIndexNames.add(dependencyIndexName); + File artifactFile = artifact.getFile(); + packageZip.writeDependency(artifactFile, libDirEntryName); + // fix 解决依赖前缀携带, lib 配置的前缀 + dependencyIndexNames.add(artifactFile.getName()); } return dependencyIndexNames; } diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginInsideInfo.java b/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginInsideInfo.java index c1374ebfaeb0cf3917aee59705807a193159be1f..1fdaf5b512febb835bffe435bf39454d51306874 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginInsideInfo.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginInsideInfo.java @@ -20,6 +20,7 @@ import com.gitee.starblues.core.descriptor.InsidePluginDescriptor; import com.gitee.starblues.utils.Assert; import lombok.Setter; +import java.util.Collections; import java.util.Date; import java.util.Map; import java.util.function.Supplier; @@ -39,7 +40,7 @@ public class DefaultPluginInsideInfo implements PluginInsideInfo { private Date startTime; private Date stopTime; - private Supplier> extensionInfoSupplier; + private Supplier> extensionInfoSupplier = Collections::emptyMap; public DefaultPluginInsideInfo(InsidePluginDescriptor pluginDescriptor) { this.pluginId = pluginDescriptor.getPluginId(); diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginManager.java b/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginManager.java index 047dc4560dc0f649d7d54d289d2fc444db4476ba..392d847e800a05b846965889045da4cdb4364128 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginManager.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/DefaultPluginManager.java @@ -180,6 +180,7 @@ public class DefaultPluginManager implements PluginManager{ if(pluginInsideInfo == null){ throw new PluginException("非法插件包: " + pluginPath); } + pluginInsideInfo.setPluginState(PluginState.PARSED); return pluginInsideInfo.toPluginInfo(); } @@ -350,7 +351,7 @@ public class DefaultPluginManager implements PluginManager{ if(ObjectUtils.isEmpty(pluginId)){ return null; } - PluginInsideInfo pluginInsideInfo = startedPlugins.get(pluginId); + PluginInsideInfo pluginInsideInfo = getPlugin(pluginId); if(pluginInsideInfo == null){ throw new PluginException("没有发现插件: " + pluginId); } @@ -546,7 +547,6 @@ public class DefaultPluginManager implements PluginManager{ pluginInsideInfo.setPluginState(PluginState.STOPPED); stopFinish(pluginInsideInfo); } - /** * 停止完成操作 * @param pluginInsideInfo pluginInsideInfo diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/PluginLauncherManager.java b/spring-brick/src/main/java/com/gitee/starblues/core/PluginLauncherManager.java index c64a2b1e6dc8973aa50d5a56cc2d38f3f6442dae..69bf9007c2fb81a52f11c7a46de7b9ce17c766df 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/PluginLauncherManager.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/PluginLauncherManager.java @@ -48,7 +48,7 @@ import java.util.concurrent.ConcurrentHashMap; * 可引导启动的插件管理者 * @author starBlues * @since 3.0.0 - * @version 3.0.3 + * @version 3.1.0 */ public class PluginLauncherManager extends DefaultPluginManager{ @@ -121,6 +121,7 @@ public class PluginLauncherManager extends DefaultPluginManager{ @Override protected void stop(PluginInsideInfo pluginInsideInfo, boolean isUninstall) throws Exception { + launcherChecker.checkCanStop(pluginInsideInfo); String pluginId = pluginInsideInfo.getPluginId(); RegistryPluginInfo registryPluginInfo = registryInfo.get(pluginId); if(registryPluginInfo == null){ diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/PluginState.java b/spring-brick/src/main/java/com/gitee/starblues/core/PluginState.java index ff124587b2945e241a6f7209359130f954746090..1af14d03f0a5e07006c49f1b61693e95ac327673 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/PluginState.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/PluginState.java @@ -51,7 +51,12 @@ public enum PluginState { /** * 停止失败状态 */ - STOPPED_FAILURE("STOPPED_FAILURE"); + STOPPED_FAILURE("STOPPED_FAILURE"), + + /** + * 被解析状态. 仅仅用于解析插件后被展示的状态 + */ + PARSED("PARSED"); private final String status; diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/classloader/NestedPluginJarResourceLoader.java b/spring-brick/src/main/java/com/gitee/starblues/core/classloader/NestedPluginJarResourceLoader.java index df179b0bcd8464c806d22476e4f3229650e56bc0..c09c2ccc808df814f4a5d0f5ac9ae506dabf6a46 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/classloader/NestedPluginJarResourceLoader.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/classloader/NestedPluginJarResourceLoader.java @@ -23,7 +23,9 @@ import com.gitee.starblues.core.descriptor.InsidePluginDescriptor; import com.gitee.starblues.loader.classloader.*; import com.gitee.starblues.loader.classloader.resource.loader.*; import com.gitee.starblues.loader.classloader.resource.storage.ResourceStorage; +import com.gitee.starblues.utils.FilesUtils; import com.gitee.starblues.utils.MsgUtils; +import com.gitee.starblues.utils.ObjectUtils; import lombok.extern.slf4j.Slf4j; import java.io.InputStream; @@ -92,7 +94,8 @@ public class NestedPluginJarResourceLoader extends AbstractResourceLoader { Set pluginLibInfos = pluginDescriptor.getPluginLibInfo(); String pluginUnique = MsgUtils.getPluginUnique(pluginDescriptor); for (PluginLibInfo pluginLibInfo : pluginLibInfos) { - jarEntry = jarFile.getJarEntry(pluginLibInfo.getPath()); + String entryName = pluginLibInfo.getPath(); + jarEntry = jarFile.getJarEntry(entryName); if(jarEntry == null){ log.debug("Not found: " + pluginLibInfo.getPath()); continue; diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/AbstractPluginDescriptorLoader.java b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/AbstractPluginDescriptorLoader.java index d9d48f12e21d14abff1504542eff58f391a95ab1..efeb3a0e72e4c0a36526012821e08a7e1f38194d 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/AbstractPluginDescriptorLoader.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/AbstractPluginDescriptorLoader.java @@ -48,7 +48,8 @@ import static com.gitee.starblues.utils.PropertiesUtils.getValue; /** * 抽象的 PluginDescriptorLoader * @author starBlues - * @version 3.0.2 + * @since 3.0.0 + * @version 3.1.0 */ @Slf4j public abstract class AbstractPluginDescriptorLoader implements PluginDescriptorLoader{ @@ -155,13 +156,13 @@ public abstract class AbstractPluginDescriptorLoader implements PluginDescriptor } protected Set getPluginLibInfo(DefaultInsidePluginDescriptor descriptor, Set dependenciesIndex){ - String pluginLibDir = descriptor.getPluginLibDir(); - boolean configPluginLibDir = false; - if(!ObjectUtils.isEmpty(pluginLibDir)){ - String libDir = getLibDir(descriptor, pluginLibDir); + String configPluginLibDir = descriptor.getPluginLibDir(); + boolean isConfigPluginLibDir = false; + if(!ObjectUtils.isEmpty(configPluginLibDir)){ + String libDir = getLibDir(descriptor, configPluginLibDir); if(!ObjectUtils.isEmpty(libDir)){ descriptor.setPluginLibDir(libDir); - configPluginLibDir = true; + isConfigPluginLibDir = true; } } if(ObjectUtils.isEmpty(dependenciesIndex)){ @@ -177,8 +178,8 @@ public abstract class AbstractPluginDescriptorLoader implements PluginDescriptor loadToMain = false; } String libPath = index; - if(configPluginLibDir){ - libPath = getLibPath(descriptor, index); + if(isConfigPluginLibDir){ + libPath = getLibPath(descriptor, configPluginLibDir, index); } pluginLibInfos.add(new PluginLibInfo(libPath, loadToMain)); } @@ -186,30 +187,49 @@ public abstract class AbstractPluginDescriptorLoader implements PluginDescriptor } protected String getLibDir(DefaultInsidePluginDescriptor descriptor, String configPluginLibDir){ - if(!FilesUtils.isRelativePath(configPluginLibDir)){ + if(FilesUtils.existFile(configPluginLibDir)){ return configPluginLibDir; } - // 是相对路径 - // 先相对当前插件目录 - String resolveRelativePath = FilesUtils.resolveRelativePath(descriptor.getPluginPath(), configPluginLibDir); - if(new File(resolveRelativePath).exists()){ + // 先检查插件相对目录 + String resolveRelativePath = null; + if(FilesUtils.isRelativePath(configPluginLibDir)){ + // 先相对当前插件目录 + resolveRelativePath = FilesUtils.resolveRelativePath(descriptor.getPluginPath(), configPluginLibDir); + } else { + resolveRelativePath = FilesUtils.joiningFilePath(descriptor.getPluginPath(), configPluginLibDir); + } + if(FilesUtils.existFile(resolveRelativePath)){ return resolveRelativePath; } // 再相对插件存放目录 - resolveRelativePath = FilesUtils.resolveRelativePath(new File(descriptor.getPluginPath()).getParent(), configPluginLibDir); - if(new File(resolveRelativePath).exists()){ + resolveRelativePath = FilesUtils.joiningFilePath(new File(descriptor.getPluginPath()).getParent(), configPluginLibDir); + if(FilesUtils.existFile(resolveRelativePath)){ return resolveRelativePath; } // 最后相对主程序目录 - resolveRelativePath = FilesUtils.resolveRelativePath(new File("").getAbsolutePath(), configPluginLibDir); - if(new File(resolveRelativePath).exists()){ + resolveRelativePath = FilesUtils.joiningFilePath(new File("").getAbsolutePath(), configPluginLibDir); + if(FilesUtils.existFile(resolveRelativePath)){ return resolveRelativePath; } return null; } - protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String index){ - return FilesUtils.joiningFilePath(descriptor.getPluginLibDir(), index); + protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String configPluginLibDir, String index){ + String pluginLibDir = descriptor.getPluginLibDir(); + if(ObjectUtils.isEmpty(pluginLibDir)){ + return index; + } + String joiningFilePath = FilesUtils.joiningFilePath(descriptor.getPluginLibDir(), index); + if(index.startsWith(configPluginLibDir)){ + // 如果 index 中前缀配置了 PLUGIN.META 中的 plugin.libDir 则尝试判断完整拼接的依赖路径文件是否存在 + // 如果存在, 则返回, 如果不存在, 则去掉重复前缀, 返回。该处是为了兼容解压后的jar中index存在 libDir 前缀 + if(FilesUtils.existFile(joiningFilePath)){ + return joiningFilePath; + } + return FilesUtils.joiningFilePath(descriptor.getPluginLibDir(), + index.replace(configPluginLibDir, "")); + } + return joiningFilePath; } protected Properties getDecryptProperties(InputStream inputStream) throws Exception{ diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/DevPluginDescriptorLoader.java b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/DevPluginDescriptorLoader.java index 432e9fc1146831097d8fbbb15e9efcdfb0478ece..f7591775c063fdae5756274093c9f2387938d0f0 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/DevPluginDescriptorLoader.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/DevPluginDescriptorLoader.java @@ -58,7 +58,7 @@ public class DevPluginDescriptorLoader extends AbstractPluginDescriptorLoader{ } @Override - protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String index) { + protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String configPluginLibDir, String index) { return index; } diff --git a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/ProdPackagePluginDescriptorLoader.java b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/ProdPackagePluginDescriptorLoader.java index 4721da36c8fc7cf426878116e87ac8460c2e0204..a52b8a6cd3aa7f853c052011f50315f358ec16b7 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/ProdPackagePluginDescriptorLoader.java +++ b/spring-brick/src/main/java/com/gitee/starblues/core/descriptor/ProdPackagePluginDescriptorLoader.java @@ -42,7 +42,8 @@ import static com.gitee.starblues.common.PluginDescriptorKey.PLUGIN_RESOURCES_CO * 生产环境打包好的插件 PluginDescriptorLoader 加载者 * 解析 jar、zip * @author starBlues - * @version 3.0.2 + * @since 3.0.0 + * @version 3.1.0 */ public class ProdPackagePluginDescriptorLoader extends AbstractPluginDescriptorLoader{ @@ -90,11 +91,19 @@ public class ProdPackagePluginDescriptorLoader extends AbstractPluginDescriptorL } @Override - protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String index) { + protected String getLibPath(DefaultInsidePluginDescriptor descriptor, String configPluginLibDir, String index) { if(PluginType.isNestedPackage(descriptor.getType())){ - return index; + String pluginLibDir = descriptor.getPluginLibDir(); + if(ObjectUtils.isEmpty(pluginLibDir)){ + return index; + } + if(index.startsWith(configPluginLibDir)){ + // 兼容解决旧版本中 jar/zip 包中, 依赖前缀携带 配置的 lib 路径 + return index; + } + return FilesUtils.joiningZipPath(pluginLibDir, index); } else { - return super.getLibPath(descriptor, index); + return super.getLibPath(descriptor, configPluginLibDir, index); } } diff --git a/spring-brick/src/main/java/com/gitee/starblues/integration/operator/PluginOperatorWrapper.java b/spring-brick/src/main/java/com/gitee/starblues/integration/operator/PluginOperatorWrapper.java index aaf90076494cbb1ff23b230e1d2b3a15b1f5099a..c96554b47d626b5a8d31f6cadd3fc9c4bdd7dc05 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/integration/operator/PluginOperatorWrapper.java +++ b/spring-brick/src/main/java/com/gitee/starblues/integration/operator/PluginOperatorWrapper.java @@ -31,7 +31,8 @@ import java.util.List; /** * 插件操作包装者 * @author starBlues - * @version 3.0.0 + * @since 3.0.0 + * @version 3.1.0 */ public class PluginOperatorWrapper implements PluginOperator{ @@ -99,7 +100,7 @@ public class PluginOperatorWrapper implements PluginOperator{ if(isDisable()){ return null; } - return pluginOperator.install(pluginPath, unpackPlugin); + return pluginOperator.load(pluginPath, unpackPlugin); } @Override diff --git a/spring-brick/src/main/java/com/gitee/starblues/utils/PluginFileUtils.java b/spring-brick/src/main/java/com/gitee/starblues/utils/PluginFileUtils.java index 3e1423ea39e138dc36856d073b0fddb70ff2794d..fb01b0d94854edc0c23520f51455b7f13398b486 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/utils/PluginFileUtils.java +++ b/spring-brick/src/main/java/com/gitee/starblues/utils/PluginFileUtils.java @@ -17,7 +17,9 @@ package com.gitee.starblues.utils; +import com.gitee.starblues.common.ManifestKey; import com.gitee.starblues.common.PackageStructure; +import com.gitee.starblues.common.PackageType; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; @@ -32,6 +34,7 @@ import java.nio.file.Paths; import java.security.MessageDigest; import java.util.Enumeration; import java.util.List; +import java.util.Objects; import java.util.jar.Attributes; import java.util.jar.Manifest; import java.util.zip.ZipEntry; @@ -41,7 +44,8 @@ import java.util.zip.ZipFile; * 插件文件工具类 * * @author starBlues - * @version 3.0.0 + * @since 3.0.0 + * @version 3.1.0 */ public final class PluginFileUtils { @@ -187,7 +191,9 @@ public final class PluginFileUtils { } File targetDirFile = new File(targetDir); if(!targetDirFile.exists()){ - targetDirFile.mkdirs(); + if(!targetDirFile.mkdirs()){ + throw new IOException("创建目录异常: " + targetDir); + } } try (ZipFile zip = new ZipFile(zipFile, Charset.forName(PackageStructure.CHARSET_NAME))) { Enumeration zipEnumeration = zip.entries(); @@ -201,23 +207,34 @@ public final class PluginFileUtils { if (zipEntry.isDirectory()) { FileUtils.forceMkdir(new File(currentTargetPath)); continue; + } else { + FilesUtils.createFile(currentTargetPath); } - InputStream in = null; - FileOutputStream out = null; - try { - in = zip.getInputStream(zipEntry); - out = new FileOutputStream(currentTargetPath); - IOUtils.copy(in, out); - } finally { - if (in != null) { - IOUtils.closeQuietly(in); - } - if (out != null) { - IOUtils.closeQuietly(out); + try (InputStream in = zip.getInputStream(zipEntry); + FileOutputStream out = new FileOutputStream(currentTargetPath)){ + if(PackageStructure.PROD_MANIFEST_PATH.equals(zipEntryName)){ + // 如果为 Manifest 文件, 则将打包类型切换为 xx-outer + resolveDecompressPluginType(in, out); + } else { + IOUtils.copy(in, out); } } } } } + + private static void resolveDecompressPluginType(InputStream inputStream, OutputStream outputStream) throws IOException{ + Manifest manifest = new Manifest(inputStream); + Attributes mainAttributes = manifest.getMainAttributes(); + String value = mainAttributes.getValue(ManifestKey.PLUGIN_PACKAGE_TYPE); + if(Objects.equals(value, PackageType.MAIN_PACKAGE_TYPE_JAR)){ + value = PackageType.PLUGIN_PACKAGE_TYPE_DIR; + } else if(Objects.equals(value, PackageType.PLUGIN_PACKAGE_TYPE_ZIP)){ + value = PackageType.PLUGIN_PACKAGE_TYPE_DIR; + } + mainAttributes.putValue(ManifestKey.PLUGIN_PACKAGE_TYPE, value); + manifest.write(outputStream); + } + } diff --git a/update.md b/update.md index fc7b034ae43e5d9f3829b3ed67f2cd37d3e6831b..87c29f1f7db8319b594101de656cbeb22dc4f9bd 100644 --- a/update.md +++ b/update.md @@ -7,4 +7,8 @@ 5. 【修复[#I5GJO9](https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I5GJO9)】`DefaultPluginManager#install` 异常无法抛出 6. 【修复】修复插件无法加载其他包依赖中的`mybatis-xml`问题 7. 【修复】修复插件子启动问题 -8. 【优化】优化依赖资源默认不缓存, 以减少内存 +8. 【修复】修复插件`load`解压异常 +9. 【修复】修复`jar`、`zip`加载依赖时未使用`libDir`配置前缀 +10.【优化】优化插件`parse`后为`parsed`状态 +11.【优化】优化依赖资源默认不缓存, 以减少内存 +