diff --git a/pom.xml b/pom.xml index 9a9e053b048e23f346cc8b4cad80a8c04cc5c325..310dd1d92ab1df1e0075becf703fc941c4525027 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ com.gitee.starblues spring-brick-parent pom - 3.1.1 + 3.1.1.2 spring-brick-common diff --git a/spring-brick-bootstrap/pom.xml b/spring-brick-bootstrap/pom.xml index bb304105d883b017085f4a0b66cb9cc9c537376d..9afb2c212b3fac9d5032849485b785ad2c271c22 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.1.2 spring-brick-bootstrap diff --git a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/CoexistBootstrapLauncher.java b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/CoexistBootstrapLauncher.java index dc226e612210a4df0137f78fee47bd1b3a6c5c09..93ecb3db3a67ef447b4773b5ec55c01dfe868b4b 100644 --- a/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/CoexistBootstrapLauncher.java +++ b/spring-brick-bootstrap/src/main/java/com/gitee/starblues/bootstrap/launcher/CoexistBootstrapLauncher.java @@ -103,7 +103,7 @@ public class CoexistBootstrapLauncher implements BootstrapLauncher{ if(autowiredType != null){ return autowiredType.value(); } else { - return AutowiredType.Type.PLUGIN; + return AutowiredType.Type.PLUGIN_MAIN; } } } diff --git a/spring-brick-common/pom.xml b/spring-brick-common/pom.xml index e3b63b278259259942b13e6f88165658ba9fdb77..8071dc10a8122e8d26ec80f79925be387b379d41 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.1.2 spring-brick-common diff --git a/spring-brick-loader/pom.xml b/spring-brick-loader/pom.xml index 2eee617fecace8772dc73b6e22f752e6039e6137..0fca51d0531f5f71ee6962290946438e73ff0ca6 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.1.2 4.0.0 diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/GeneralUrlClassLoader.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/GeneralUrlClassLoader.java index 8fcd39e096ade1d29ca214a1256d2b16baae59e1..7989c1257f1914641ace8bbb06c9d3417ee4ffea 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/GeneralUrlClassLoader.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/classloader/GeneralUrlClassLoader.java @@ -1,12 +1,12 @@ /** * Copyright [2019-Present] [starBlues] - * + *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,6 +17,7 @@ package com.gitee.starblues.loader.classloader; import com.gitee.starblues.loader.classloader.resource.Resource; +import com.gitee.starblues.loader.classloader.resource.loader.JarResourceLoader; import com.gitee.starblues.loader.classloader.resource.loader.ResourceLoader; import com.gitee.starblues.loader.classloader.resource.loader.ResourceLoaderFactory; import com.gitee.starblues.loader.classloader.resource.storage.EmptyResourceStorage; @@ -36,8 +37,8 @@ import java.util.List; * 通用的Url ClassLoader * * @author starBlues - * @since 3.0.4 * @version 3.1.0 + * @since 3.0.4 */ public class GeneralUrlClassLoader extends URLClassLoader implements ResourceLoaderFactory { @@ -63,7 +64,7 @@ public class GeneralUrlClassLoader extends URLClassLoader implements ResourceLoa @Override public void addResource(File file) throws Exception { - if(!file.exists()){ + if (!file.exists()) { throw new FileNotFoundException("Not found file:" + file.getPath()); } addURL(file.toPath().toUri().toURL()); @@ -86,7 +87,12 @@ public class GeneralUrlClassLoader extends URLClassLoader implements ResourceLoa @Override public void addResource(ResourceLoader resourceLoader) throws Exception { - resourceLoader.load(resourceStorage); + + if (resourceLoader instanceof JarResourceLoader) { + addResource(resourceLoader.getBaseUrl()); + } else { + resourceLoader.load(resourceStorage); + } } @Override diff --git a/spring-brick-maven-packager/pom.xml b/spring-brick-maven-packager/pom.xml index 8756df06dd46a6163f50f2cb35647feaba865986..e349fd7ca423efe8ddba93badb48881adc99b981 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.1.2 spring-brick-maven-packager 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 5da4b4f6dc99a81413f656242daa8ae5d881776f..7b6b8cc2fbab86dd9dca911090ff94e594a14a7a 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 @@ -183,7 +183,7 @@ public class ZipProdRepackager extends DevRepackager { File artifactFile = artifact.getFile(); packageZip.writeDependency(artifactFile, libDirEntryName); // fix 解决依赖前缀携带, lib 配置的前缀 - dependencyIndexNames.add(artifactFile.getName()); + dependencyIndexNames.add(artifactFile.getName() + repackageMojo.resolveLoadToMain(artifact)); } return dependencyIndexNames; } 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 7579b252d6b359c8b0445e482659ad732cbd53dc..d5ac9a0c6383b2c0bb5fda7ab42c4ecec10f5e6e 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.1.2 spring-brick-packager false true diff --git a/spring-brick/pom.xml b/spring-brick/pom.xml index 312573dbee59d04abead6807a49328ae02297744..06ab6f1351092448493c04d95debb208f6794530 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.1.2 spring-brick diff --git a/spring-brick/src/main/java/com/gitee/starblues/spring/web/thymeleaf/PluginThymeleafInvolved.java b/spring-brick/src/main/java/com/gitee/starblues/spring/web/thymeleaf/PluginThymeleafInvolved.java index 350a3f92cae8389ef40f0336149eb205d43434d8..ba84650ff763c39492d7763503988d75dd7b54b9 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/spring/web/thymeleaf/PluginThymeleafInvolved.java +++ b/spring-brick/src/main/java/com/gitee/starblues/spring/web/thymeleaf/PluginThymeleafInvolved.java @@ -26,10 +26,13 @@ import com.gitee.starblues.utils.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.support.GenericApplicationContext; +import org.thymeleaf.IEngineConfiguration; +import org.thymeleaf.TemplateEngine; import org.thymeleaf.spring5.SpringTemplateEngine; import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; import org.thymeleaf.templateresolver.ITemplateResolver; +import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -44,18 +47,35 @@ public class PluginThymeleafInvolved implements PluginLaunchInvolved { private static final Logger logger = LoggerFactory.getLogger(PluginThymeleafInvolved.class); - private Set templateResolvers; +// private Set templateResolvers; + private SpringTemplateEngine springTemplateEngine; private final Map pluginTemplateResolver = new ConcurrentHashMap<>(); @Override public void initialize(GenericApplicationContext applicationContext, IntegrationConfiguration configuration) { - this.templateResolvers = getTemplateResolvers(getSpringTemplateEngine(applicationContext)); + try{ + this.springTemplateEngine = getSpringTemplateEngine(applicationContext); + getTemplateResolvers(this.springTemplateEngine); + modifiyEngineConfiguration(this.springTemplateEngine); + } catch (Exception e){ + logger.error("Plugin thymeleaf initialize exception. {}", e.getMessage(), e); + } + } + + /** + * 默认的templateResolvers不可以修改,所以这里需要重新创建一个 + */ + private void modifiyEngineConfiguration(TemplateEngine templateEngine) throws IllegalAccessException { + + IEngineConfiguration configuration = templateEngine.getConfiguration(); + Set templateResolverSet = configuration.getTemplateResolvers(); + ClassUtils.setReflectionField(configuration, "templateResolvers", new HashSet<>(templateResolverSet)); } @Override public void after(PluginInsideInfo pluginInsideInfo, ClassLoader classLoader, SpringPluginHook pluginHook) throws Exception { - if(templateResolvers == null){ + if(springTemplateEngine == null){ return; } @@ -94,7 +114,10 @@ public class PluginThymeleafInvolved implements PluginLaunchInvolved { resolver.setOrder(order); } resolver.setCheckExistence(true); - templateResolvers.add(resolver); + // 修复,当上传插件时,会出现模板解析不到的问题 + getTemplateResolvers(springTemplateEngine).add(resolver); + getConfigTemplateResolvers(springTemplateEngine).add(resolver); + InsidePluginDescriptor descriptor = pluginInsideInfo.getPluginDescriptor(); if(!pluginTemplateResolver.containsKey(descriptor.getPluginId())){ pluginTemplateResolver.put(descriptor.getPluginId(), resolver); @@ -103,7 +126,12 @@ public class PluginThymeleafInvolved implements PluginLaunchInvolved { @Override public void close(PluginInsideInfo pluginInsideInfo, ClassLoader classLoader) throws Exception { + + ClassLoaderTemplateResolver resolver = pluginTemplateResolver.get(pluginInsideInfo.getPluginId()); pluginTemplateResolver.remove(pluginInsideInfo.getPluginId()); + // 这里删除干净 + getTemplateResolvers(springTemplateEngine).remove(resolver); + getConfigTemplateResolvers(springTemplateEngine).remove(resolver); } private SpringTemplateEngine getSpringTemplateEngine(GenericApplicationContext context){ @@ -120,6 +148,7 @@ public class PluginThymeleafInvolved implements PluginLaunchInvolved { } private Set getTemplateResolvers(SpringTemplateEngine springTemplateEngine) { + String errorMsg = "当前插件不能使用Thymeleaf, 主程序未发现Thymeleaf注册入口"; if(springTemplateEngine == null){ logger.error(errorMsg); @@ -136,4 +165,9 @@ public class PluginThymeleafInvolved implements PluginLaunchInvolved { } } + private Set getConfigTemplateResolvers(SpringTemplateEngine springTemplateEngine) { + + return springTemplateEngine.getConfiguration().getTemplateResolvers(); + } + } diff --git a/spring-brick/src/main/java/com/gitee/starblues/utils/ClassUtils.java b/spring-brick/src/main/java/com/gitee/starblues/utils/ClassUtils.java index 3cb31897a7d4b0cca0798b412d11f2e4aeb1b1c4..f6079f7f560a73bbd1f7093b26b8adaf8f94fb64 100644 --- a/spring-brick/src/main/java/com/gitee/starblues/utils/ClassUtils.java +++ b/spring-brick/src/main/java/com/gitee/starblues/utils/ClassUtils.java @@ -84,6 +84,16 @@ public class ClassUtils { return getReflectionField(templateResolversField, o); } + public static void setReflectionField(Object object, String fieldName, Object value) throws IllegalAccessException { + if (object == null) { + return; + } + Field field = ReflectionUtils.findField(object.getClass(), + fieldName); + field.setAccessible(true); + field.set(object, value); + } + /** * 通过反射Field获取字段 *