From 8c9369d115f525684e0320d0aa606f527b2d3e5d Mon Sep 17 00:00:00 2001 From: StarBlues Date: Wed, 4 May 2022 11:14:59 +0800 Subject: [PATCH 1/3] update to 3.0.2 --- .../com/gitee/starblues/utils/FilesUtils.java | 1 - .../starblues/loader/LoaderConstant.java | 4 + .../launcher/MainJarOuterProgramLauncher.java | 9 +- .../starblues/loader/utils/FilesUtils.java | 127 ++++++++++++++++++ .../plugin/pack/BasicRepackager.java | 7 +- .../gitee/starblues/plugin/pack/Constant.java | 1 + 6 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 spring-brick-loader/src/main/java/com/gitee/starblues/loader/utils/FilesUtils.java 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 cc91643..34b06d3 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 @@ -20,7 +20,6 @@ import com.gitee.starblues.common.Constants; import java.io.File; import java.io.IOException; -import java.util.function.Supplier; /** * 文件工具类 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 fddd18d..4631f55 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 @@ -28,6 +28,10 @@ public class LoaderConstant { public static final String PROD_CLASSES_URL_SIGN = "/classes!/"; public static final String PROD_LIB_PATH = "lib/"; + /** + * 相对路径符号标志 + */ + public final static String RELATIVE_SIGN = "~"; /** diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/MainJarOuterProgramLauncher.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/MainJarOuterProgramLauncher.java index 9716ee0..22249d6 100644 --- a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/MainJarOuterProgramLauncher.java +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/launcher/MainJarOuterProgramLauncher.java @@ -22,8 +22,8 @@ import com.gitee.starblues.loader.archive.JarFileArchive; import com.gitee.starblues.loader.classloader.GenericClassLoader; import com.gitee.starblues.loader.classloader.resource.loader.MainJarResourceLoader; import com.gitee.starblues.loader.launcher.runner.MethodRunner; +import com.gitee.starblues.loader.utils.FilesUtils; import com.gitee.starblues.loader.utils.ObjectUtils; -import com.gitee.starblues.loader.utils.ResourceUtils; import java.io.File; import java.io.FileFilter; @@ -90,10 +90,14 @@ public class MainJarOuterProgramLauncher extends MainProgramLauncher{ private void addLibResource(Archive archive, GenericClassLoader classLoader) throws Exception { Manifest manifest = archive.getManifest(); String libDir = manifest.getMainAttributes().getValue(MAIN_LIB_DIR); + String relativePath = rootJarFile.isDirectory() ? rootJarFile.getPath() : rootJarFile.getParent(); + libDir = FilesUtils.resolveRelativePath(relativePath, libDir); File libJarDir = new File(libDir); if(libJarDir.exists()){ List libIndexes = getLibIndexes(manifest); addLibJarFile(libJarDir, libIndexes, classLoader); + } else { + throw new IllegalStateException("主程序依赖目录不存在: " + libDir); } } @@ -110,6 +114,9 @@ public class MainJarOuterProgramLauncher extends MainProgramLauncher{ } indexes.add(index); } + if(indexes.isEmpty()){ + throw new IllegalStateException("主程序依赖包未发现!"); + } return indexes; } diff --git a/spring-brick-loader/src/main/java/com/gitee/starblues/loader/utils/FilesUtils.java b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/utils/FilesUtils.java new file mode 100644 index 0000000..1b17a8b --- /dev/null +++ b/spring-brick-loader/src/main/java/com/gitee/starblues/loader/utils/FilesUtils.java @@ -0,0 +1,127 @@ +/** + * Copyright [2019-2022] [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 + * + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.gitee.starblues.loader.utils; + +import com.gitee.starblues.loader.LoaderConstant; + +import java.io.File; +import java.io.IOException; + +/** + * 文件工具类 + * + * @author starBlues + * @version 3.0.2 + */ +public class FilesUtils { + + /** + * 获取存在的文件 + * + * @param pathStr 文件路径 + * @return File + */ + public static File getExistFile(String pathStr){ + File file = new File(pathStr); + if(file.exists()){ + return file; + } + return null; + } + + + /** + * 拼接file路径 + * + * @param paths 拼接的路径 + * @return 拼接的路径 + */ + 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 > 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(); + } + + public static File createFile(String path) throws IOException { + try { + File file = new File(path); + File parentFile = file.getParentFile(); + if(!parentFile.exists()){ + if(!parentFile.mkdirs()){ + throw new IOException("Create " + parentFile + " dir error"); + } + } + if(file.createNewFile()){ + return file; + } + throw new IOException("Create " + path + " file error"); + } catch (Exception e){ + throw new IOException("Create " + path + " file error"); + } + } + + + /** + * 解决相对路径 + * @param rootPath 根路径 + * @param relativePath 以 ~ 开头的相对路径 + * @return 处理后的路径 + */ + public static String resolveRelativePath(String rootPath, String relativePath){ + if(ObjectUtils.isEmpty(relativePath)){ + return relativePath; + } + if(isRelativePath(relativePath)){ + return joiningFilePath(rootPath, relativePath.replaceFirst(LoaderConstant.RELATIVE_SIGN, "")); + } else { + return relativePath; + } + } + + /** + * 是否是相对路径 + * @param path 路径 + * @return true 为相对路径, false 未非相对路径 + */ + public static boolean isRelativePath(String path){ + if(ObjectUtils.isEmpty(path)){ + return false; + } + return path.startsWith(LoaderConstant.RELATIVE_SIGN); + } + +} diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java index c0f1edd..735f472 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java @@ -16,12 +16,7 @@ package com.gitee.starblues.plugin.pack; -import com.gitee.starblues.common.AbstractDependencyPlugin; -import com.gitee.starblues.common.ManifestKey; -import com.gitee.starblues.common.PackageStructure; -import com.gitee.starblues.common.PackageType; -import com.gitee.starblues.plugin.pack.dev.DevConfig; -import com.gitee.starblues.plugin.pack.utils.CommonUtils; +import com.gitee.starblues.common.*; import com.gitee.starblues.utils.FilesUtils; import com.gitee.starblues.utils.ObjectUtils; import lombok.Getter; diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java index 3358372..fa7e691 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java @@ -26,6 +26,7 @@ public class Constant { public static final String PACKAGING_POM = "pom"; public static final String SCOPE_PROVIDED = "provided"; public static final String SCOPE_COMPILE = "compile"; + public static final String SCOPE_SYSTEM = "system"; public static final String SCOPE_TEST = "test"; public static final String MODE_MAIN = "main"; -- Gitee From 299e0d33ddf3de3e8a88474187a623e1f39c31d1 Mon Sep 17 00:00:00 2001 From: StarBlues Date: Wed, 4 May 2022 12:18:31 +0800 Subject: [PATCH 2/3] update to 3.0.2 --- .../plugin/pack/AbstractPackagerMojo.java | 3 +++ .../plugin/pack/BasicRepackager.java | 5 +++- .../gitee/starblues/plugin/pack/Constant.java | 24 +++++++++++++++++++ .../plugin/pack/main/JarNestPackager.java | 2 +- .../plugin-help.xml | 9 +++++++ .../main/resources/META-INF/maven/plugin.xml | 9 +++++++ 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/AbstractPackagerMojo.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/AbstractPackagerMojo.java index f169726..b24c525 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/AbstractPackagerMojo.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/AbstractPackagerMojo.java @@ -54,6 +54,9 @@ public abstract class AbstractPackagerMojo extends AbstractDependencyFilterMojo{ @Parameter(property = "spring-brick-packager.loadMainResourcePattern", required = false) private LoadMainResourcePattern loadMainResourcePattern; + @Parameter(property = "spring-brick-packager.includeSystemScope", defaultValue = "true", required = false) + private Boolean includeSystemScope; + @Override public final void execute() throws MojoExecutionException, MojoFailureException { if(Constant.isPom(this.getProject().getPackaging())){ diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java index 735f472..bb1f790 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/BasicRepackager.java @@ -22,8 +22,10 @@ import com.gitee.starblues.utils.ObjectUtils; import lombok.Getter; import org.apache.commons.io.FileUtils; import org.apache.maven.artifact.Artifact; +import org.apache.maven.model.Dependency; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; import java.io.File; import java.io.FileOutputStream; @@ -350,7 +352,8 @@ public class BasicRepackager implements Repackager{ * @return 返回true表示被过滤掉 */ protected boolean filterArtifact(Artifact artifact){ - return Constant.scopeFilter(artifact.getScope()); + return Constant.filterMainTypeArtifact(artifact) || + Constant.filterArtifact(artifact, repackageMojo.getIncludeSystemScope()); } diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java index fa7e691..a08d41b 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/Constant.java @@ -16,6 +16,8 @@ package com.gitee.starblues.plugin.pack; +import org.apache.maven.artifact.Artifact; + /** * 静态类 * @author starBlues @@ -29,6 +31,8 @@ public class Constant { public static final String SCOPE_SYSTEM = "system"; public static final String SCOPE_TEST = "test"; + public static final String MAVEN_MAIN_TYPE = "main"; + public static final String MODE_MAIN = "main"; public static final String MODE_DEV = "dev"; public static final String MODE_PROD = "prod"; @@ -39,9 +43,29 @@ public class Constant { return PACKAGING_POM.equalsIgnoreCase(packageType); } + public static boolean filterArtifact(Artifact artifact, Boolean includeSystemScope){ + boolean scopeFilter = Constant.scopeFilter(artifact.getScope()); + if(scopeFilter){ + return true; + } + if(Constant.isSystemScope(artifact.getScope())){ + return includeSystemScope == null || !includeSystemScope; + } + return false; + } + + public static boolean filterMainTypeArtifact(Artifact artifact){ + // 配置了为main的依赖, 则对其过滤 + return MAVEN_MAIN_TYPE.equalsIgnoreCase(artifact.getType()); + } + public static boolean scopeFilter(String scope){ return SCOPE_PROVIDED.equalsIgnoreCase(scope) || SCOPE_TEST.equalsIgnoreCase(scope); } + public static boolean isSystemScope(String scope){ + return SCOPE_SYSTEM.equalsIgnoreCase(scope); + } + } diff --git a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/main/JarNestPackager.java b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/main/JarNestPackager.java index c063ea3..e866c3d 100644 --- a/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/main/JarNestPackager.java +++ b/spring-brick-maven-packager/src/main/java/com/gitee/starblues/plugin/pack/main/JarNestPackager.java @@ -108,7 +108,7 @@ public class JarNestPackager implements Repackager { } protected boolean filterArtifact(Artifact artifact) { - return Constant.scopeFilter(artifact.getScope()); + return Constant.filterArtifact(artifact, repackageMojo.getIncludeSystemScope()); } protected String createLibEntry() throws Exception { 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 d75716e..ebe06e7 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 @@ -141,6 +141,14 @@ true 加密配置 + + includeSystemScope + boolean + 3.0.2 + false + true + 是否包含scope类型为system的依赖 + @@ -155,6 +163,7 @@ + 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 d75716e..ebe06e7 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 @@ -141,6 +141,14 @@ true 加密配置 + + includeSystemScope + boolean + 3.0.2 + false + true + 是否包含scope类型为system的依赖 + @@ -155,6 +163,7 @@ + -- Gitee From ebd45cad728dae7e193e4fd1be510bd6dc0fe3d9 Mon Sep 17 00:00:00 2001 From: StarBlues Date: Wed, 4 May 2022 12:20:39 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/update.md b/update.md index c61e7ee..f2ee7f5 100644 --- a/update.md +++ b/update.md @@ -1,6 +1,7 @@ 1. 新增 `xx-outer、dir` 打包类型的插件可自定义依赖目录 -2. 修复插件拦截器无法拦截不存在的url -3. 修复主程序在 `jar-outer` 打包模式后无法启动问题 -4. 修复插件首次安装时异常 -5. fix https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I53K4G -6. fix https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I53T9W \ No newline at end of file +2. 新增`includeSystemScope`、`type=main` 打包属性 +3. 修复插件拦截器无法拦截不存在的url +4. 修复主程序在 `jar-outer` 打包模式后无法启动问题 +5. 修复插件首次安装时异常 +6. fix https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I53K4G +7. fix https://gitee.com/starblues/springboot-plugin-framework-parent/issues/I53T9W \ No newline at end of file -- Gitee