From b91f9b254f021ef79ebfaadd85136cd85b75b906 Mon Sep 17 00:00:00 2001 From: StarBlues Date: Sun, 21 May 2023 19:56:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=88=B03.1.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- spring-brick-bootstrap/pom.xml | 2 +- spring-brick-common/pom.xml | 2 +- .../gitee/starblues/common/ManifestKey.java | 5 --- spring-brick-loader/pom.xml | 2 +- .../starblues/loader/LoaderConstant.java | 1 - .../loader/BaseURLResourceLoader.java | 36 +++++++++++++++++++ .../classpath/JarOutClasspathResource.java | 31 +++------------- .../coexist/CoexistJarOuterLauncher.java | 12 +++++-- .../isolation/IsolationJarOuterLauncher.java | 9 +++-- spring-brick-maven-packager/pom.xml | 2 +- .../plugin-help.xml | 2 +- .../main/resources/META-INF/maven/plugin.xml | 2 +- spring-brick/pom.xml | 2 +- .../NestedPluginJarResourceLoader.java | 2 ++ .../operator/DefaultPluginOperator.java | 3 +- update.md | 11 +++--- 17 files changed, 74 insertions(+), 52 deletions(-) create mode 100644 spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/resource/loader/BaseURLResourceLoader.java diff --git a/pom.xml b/pom.xml index 9a9e053..def3519 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.gitee.starblues spring-brick-parent pom - 3.1.1 + 3.1.2 spring-brick-common diff --git a/spring-brick-bootstrap/pom.xml b/spring-brick-bootstrap/pom.xml index bb30410..0bf2be4 100644 --- a/spring-brick-bootstrap/pom.xml +++ b/spring-brick-bootstrap/pom.xml @@ -7,7 +7,7 @@ spring-brick-parent com.gitee.starblues - 3.1.1 + 3.1.2 spring-brick-bootstrap diff --git a/spring-brick-common/pom.xml b/spring-brick-common/pom.xml index e3b63b2..28acc18 100644 --- a/spring-brick-common/pom.xml +++ b/spring-brick-common/pom.xml @@ -7,7 +7,7 @@ spring-brick-parent com.gitee.starblues - 3.1.1 + 3.1.2 spring-brick-common diff --git a/spring-brick-common/src/main/java/com/gitee/starblues/common/ManifestKey.java b/spring-brick-common/src/main/java/com/gitee/starblues/common/ManifestKey.java index 0a33924..74b6267 100644 --- a/spring-brick-common/src/main/java/com/gitee/starblues/common/ManifestKey.java +++ b/spring-brick-common/src/main/java/com/gitee/starblues/common/ManifestKey.java @@ -78,11 +78,6 @@ public class ManifestKey { */ public static final String MAIN_LIB_DIR = "Lib-Dir"; - /** - * jar main lib indexes - */ - public static final String MAIN_LIB_INDEXES = "Lib-Indexes"; - /** * main package type diff --git a/spring-brick-loader/pom.xml b/spring-brick-loader/pom.xml index 2eee617..34b1da2 100644 --- a/spring-brick-loader/pom.xml +++ b/spring-brick-loader/pom.xml @@ -5,7 +5,7 @@ spring-brick-parent com.gitee.starblues - 3.1.1 + 3.1.2 4.0.0 diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/LoaderConstant.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/LoaderConstant.java index cf9da2c..bb7853e 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/LoaderConstant.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/LoaderConstant.java @@ -39,7 +39,6 @@ public class LoaderConstant { * ================= Manifest Key ===================== */ public static final String MAIN_LIB_DIR = "Lib-Dir"; - public static final String MAIN_LIB_INDEXES = "Lib-Indexes"; public static final String MAIN_LIB_INDEXES_SPLIT = " "; public static final String START_CLASS = "Start-Class"; diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/resource/loader/BaseURLResourceLoader.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/resource/loader/BaseURLResourceLoader.java new file mode 100644 index 0000000..5468cb8 --- /dev/null +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/resource/loader/BaseURLResourceLoader.java @@ -0,0 +1,36 @@ +package com.gitee.starblues.loader.classloader.resource.loader; + +import com.gitee.starblues.loader.classloader.resource.storage.ResourceStorage; + +import java.net.URL; + +/** + * 基本 URL 资源加载 + * + * @author starBlues + * @since 3.1.2 + * @version 3.1.2 + */ +public class BaseURLResourceLoader implements ResourceLoader{ + + private final URL baseUrl; + + public BaseURLResourceLoader(URL baseUrl) { + this.baseUrl = baseUrl; + } + + @Override + public URL getBaseUrl() { + return baseUrl; + } + + @Override + public void load(ResourceStorage resourceStorage) throws Exception { + + } + + @Override + public void close() throws Exception { + + } +} diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/classpath/JarOutClasspathResource.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/classpath/JarOutClasspathResource.java index 3d382a3..31f0efe 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/classpath/JarOutClasspathResource.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/classpath/JarOutClasspathResource.java @@ -20,7 +20,7 @@ import com.gitee.starblues.loader.archive.Archive; import com.gitee.starblues.loader.archive.ExplodedArchive; import com.gitee.starblues.loader.archive.JarFileArchive; import com.gitee.starblues.loader.utils.FilesUtils; -import com.gitee.starblues.loader.utils.ObjectUtils; +import com.gitee.starblues.loader.utils.ResourceUtils; import lombok.AllArgsConstructor; import java.io.File; @@ -36,8 +36,8 @@ import static com.gitee.starblues.loader.LoaderConstant.*; * jar out 类型的 classpath 获取者 * * @author starBlues - * @version 3.1.0 * @since 3.0.4 + * @version 3.1.2 */ @AllArgsConstructor public class JarOutClasspathResource implements ClasspathResource{ @@ -93,8 +93,7 @@ public class JarOutClasspathResource implements ClasspathResource{ if(!libJarDir.exists()){ throw new IllegalStateException("主程序依赖目录不存在: " + libDir); } - List libIndexes = getLibIndexes(manifest); - File[] libJarFile = getLibJarFile(libJarDir, libIndexes); + File[] libJarFile = getLibJarFile(libJarDir); List urls = new ArrayList<>(libJarFile.length); for (File file : libJarFile) { urls.add(file.toPath().toUri().toURL()); @@ -102,31 +101,11 @@ public class JarOutClasspathResource implements ClasspathResource{ return urls; } - private List getLibIndexes(Manifest manifest){ - String libIndexes = manifest.getMainAttributes().getValue(MAIN_LIB_INDEXES); - if(ObjectUtils.isEmpty(libIndexes)){ - return Collections.emptyList(); - } - String[] indexSplit = libIndexes.split(MAIN_LIB_INDEXES_SPLIT); - List indexes = new ArrayList<>(indexSplit.length); - for (String index : indexSplit) { - if(ObjectUtils.isEmpty(index)){ - continue; - } - indexes.add(index); - } - if(indexes.isEmpty()){ - throw new IllegalStateException("主程序依赖包未发现!"); - } - return indexes; - } - - private File[] getLibJarFile(File rootFile, List libIndexes) { - Set linIndexes = new HashSet<>(libIndexes); + private File[] getLibJarFile(File rootFile) { File[] listFiles = rootFile.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { - return linIndexes.contains(pathname.getName()); + return ResourceUtils.isJarFile(pathname); } }); if(listFiles == null || listFiles.length == 0){ diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/coexist/CoexistJarOuterLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/coexist/CoexistJarOuterLauncher.java index 5adca6d..9ceb5ab 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/coexist/CoexistJarOuterLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/coexist/CoexistJarOuterLauncher.java @@ -17,6 +17,7 @@ package com.gitee.starblues.loader.launcher.coexist; import com.gitee.starblues.loader.classloader.GeneralUrlClassLoader; +import com.gitee.starblues.loader.classloader.resource.loader.MainJarResourceLoader; import com.gitee.starblues.loader.launcher.classpath.ClasspathResource; import com.gitee.starblues.loader.launcher.classpath.JarOutClasspathResource; import com.gitee.starblues.loader.launcher.runner.MethodRunner; @@ -26,12 +27,14 @@ import java.net.URL; import java.util.List; import java.util.Objects; +import static com.gitee.starblues.loader.LoaderConstant.PROD_CLASSES_URL_SIGN; + /** * 主程序jar-outer 模式启动者 * * @author starBlues - * @since 3.0.2 + * @since 3.1.2 * @version 3.0.2 */ public class CoexistJarOuterLauncher extends CoexistBaseLauncher { @@ -54,7 +57,12 @@ public class CoexistJarOuterLauncher extends CoexistBaseLauncher { super.addResource(classLoader); List classpath = classpathResource.getClasspath(); for (URL url : classpath) { - classLoader.addResource(url); + String path = url.getPath(); + if(path.contains(PROD_CLASSES_URL_SIGN)){ + classLoader.addResource(new MainJarResourceLoader(url)); + } else { + classLoader.addResource(url); + } } } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/isolation/IsolationJarOuterLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/isolation/IsolationJarOuterLauncher.java index 3519c76..8b5553f 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/isolation/IsolationJarOuterLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/isolation/IsolationJarOuterLauncher.java @@ -37,7 +37,7 @@ import static com.gitee.starblues.loader.LoaderConstant.PROD_CLASSES_URL_SIGN; * * @author starBlues * @since 3.0.2 - * @version 3.0.2 + * @version 3.1.2 */ public class IsolationJarOuterLauncher extends IsolationBaseLauncher { @@ -68,7 +68,12 @@ public class IsolationJarOuterLauncher extends IsolationBaseLauncher { baseResource.addAll(classpath); } for (URL url : baseResource) { - classLoader.addResource(url); + String path = url.getPath(); + if(path.contains(PROD_CLASSES_URL_SIGN)){ + classLoader.addResource(new MainJarResourceLoader(url)); + } else { + classLoader.addResource(url); + } } } diff --git a/spring-brick-maven-packager/pom.xml b/spring-brick-maven-packager/pom.xml index 8756df0..232833c 100644 --- a/spring-brick-maven-packager/pom.xml +++ b/spring-brick-maven-packager/pom.xml @@ -7,7 +7,7 @@ spring-brick-parent com.gitee.starblues - 3.1.1 + 3.1.2 spring-brick-maven-packager diff --git a/spring-brick-maven-packager/src/main/resources/META-INF/maven/com.gitee.starblues.springboot-plugin-maven-packager/plugin-help.xml b/spring-brick-maven-packager/src/main/resources/META-INF/maven/com.gitee.starblues.springboot-plugin-maven-packager/plugin-help.xml index 7579b25..d4f52ad 100644 --- a/spring-brick-maven-packager/src/main/resources/META-INF/maven/com.gitee.starblues.springboot-plugin-maven-packager/plugin-help.xml +++ b/spring-brick-maven-packager/src/main/resources/META-INF/maven/com.gitee.starblues.springboot-plugin-maven-packager/plugin-help.xml @@ -4,7 +4,7 @@ Spring Boot Plugin Maven Packager com.gitee.starblues spring-brick-maven-packager - 3.1.1 + 3.1.2 spring-brick-packager false true diff --git a/spring-brick-maven-packager/src/main/resources/META-INF/maven/plugin.xml b/spring-brick-maven-packager/src/main/resources/META-INF/maven/plugin.xml index 7579b25..d4f52ad 100644 --- a/spring-brick-maven-packager/src/main/resources/META-INF/maven/plugin.xml +++ b/spring-brick-maven-packager/src/main/resources/META-INF/maven/plugin.xml @@ -4,7 +4,7 @@ Spring Boot Plugin Maven Packager com.gitee.starblues spring-brick-maven-packager - 3.1.1 + 3.1.2 spring-brick-packager false true diff --git a/spring-brick/pom.xml b/spring-brick/pom.xml index 312573d..fa3ea42 100644 --- a/spring-brick/pom.xml +++ b/spring-brick/pom.xml @@ -7,7 +7,7 @@ spring-brick-parent com.gitee.starblues - 3.1.1 + 3.1.2 spring-brick 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 cce11fc..d7c770b 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 @@ -76,6 +76,8 @@ public class NestedPluginJarResourceLoader extends AbstractResourceLoader { private void addClassPath(ResourceStorage resourceStorage, JarFile jarFile) throws Exception{ String classesPath = pluginDescriptor.getPluginClassPath(); Enumeration entries = jarFile.entries(); + resourceLoaderFactory.addResource(new BaseURLResourceLoader(baseUrl)); + resourceLoaderFactory.addResource(new BaseURLResourceLoader(new URL(baseUrl, "classes/"))); while (entries.hasMoreElements()){ JarEntry jarEntry = entries.nextElement(); if(!jarEntry.getName().startsWith(classesPath)){ diff --git a/spring-brick/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java b/spring-brick/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java index a82bb51..77709d6 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java +++ b/spring-brick/src/main/java/com/gitee/starblues/integration/operator/DefaultPluginOperator.java @@ -285,6 +285,8 @@ public class DefaultPluginOperator implements PluginOperator { // 将上传的插件拷贝到临时目录 try (FileOutputStream outputStream = new FileOutputStream(tempFile)){ IOUtils.copy(inputStream, outputStream); + } finally { + IOUtils.closeQuietly(inputStream); } try { // 解析该插件包 @@ -317,7 +319,6 @@ public class DefaultPluginOperator implements PluginOperator { verifyFailureDelete(tempFilePath, e); throw e; } finally { - IOUtils.closeQuietly(inputStream); // 删除临时文件 tempFile.deleteOnExit(); } diff --git a/update.md b/update.md index 34a5d56..de7cb66 100644 --- a/update.md +++ b/update.md @@ -1,7 +1,4 @@ -1. 【新增】主程序可通过`pluginInfo`对象获取插件的`ClassLoader`。 -2. 【新增】新增配置`plugin.pluginSwaggerScan`可禁用扫描插件的 `swagger` 接口。 -3. 【新增】插件配置文件`spring.profiles.active`的值可跟随主程序配置切换。 -4. 【新增】插件的日志可配置为跟随主程序日志配置打印。 -5. 【新增】补充常见打包的 `META-INF\MANIFEST.MF` 文件内容。 -6. 【优化】优化插件隔离模式下,内存占用过大的问题。 -7. 【修复[#I61INH](https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I61INH)】修复`PluginUser#getBean(String name, boolean includeMainBeans)`返回的`Bean`错误 \ No newline at end of file +1. 【修复】修复主程序打成`jar-out`类型包时,无法加载主类的问题 +2. 【修复】修复插件包打成`jar-out`时无法加载依赖的问题 +3. 【修复】修复插件在运行状态无法加载类的问题 +4. 【修复】修复对同一个插件包重复安装时,源插件包被系统占用的问题 \ No newline at end of file -- Gitee