diff --git a/common-env/src/main/java/taboolib/common/env/ParsedDependency.java b/common-env/src/main/java/taboolib/common/env/ParsedDependency.java index fe9adb945..82385f911 100644 --- a/common-env/src/main/java/taboolib/common/env/ParsedDependency.java +++ b/common-env/src/main/java/taboolib/common/env/ParsedDependency.java @@ -3,6 +3,7 @@ import org.tabooproject.reflex.LazyEnum; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -62,7 +63,12 @@ public class ParsedDependency { */ private final boolean external; - public ParsedDependency(String value, String test, String repository, boolean transitive, boolean ignoreOptional, boolean ignoreException, List scopes, List relocate, boolean external) { + /** + * 过滤库 + */ + private final List excludes; + + public ParsedDependency(String value, String test, String repository, boolean transitive, boolean ignoreOptional, boolean ignoreException, List scopes, List relocate, boolean external, List excludes) { this.value = value; this.test = test; this.repository = repository; @@ -72,6 +78,7 @@ public ParsedDependency(String value, String test, String repository, boolean tr this.scopes = scopes; this.relocate = relocate; this.external = external; + this.excludes = excludes; } @SuppressWarnings("unchecked") @@ -84,9 +91,10 @@ public ParsedDependency(Map map) { this.ignoreException = (boolean) map.getOrDefault("ignoreException", false); this.relocate = (List) map.getOrDefault("relocate", new ArrayList<>()); this.external = (boolean) map.getOrDefault("external", true); - this.scopes = new ArrayList<>(); + this.scopes = new ArrayList<>(Arrays.asList(DependencyScope.RUNTIME, DependencyScope.COMPILE)); List scopesEnums = (List) map.getOrDefault("scopes", new ArrayList<>()); scopesEnums.forEach(it -> this.scopes.add((DependencyScope) it.getInstance())); + this.excludes = (List) map.getOrDefault("excludes", new ArrayList<>()); } public String value() { @@ -125,6 +133,10 @@ public boolean external() { return external; } + public List excludes() { + return excludes; + } + @Override public String toString() { return "ParsedDependency{" + @@ -137,6 +149,7 @@ public String toString() { ", scopes=" + scopes + ", relocate=" + relocate + ", external=" + external + + ", exclude =" + excludes + '}'; } } diff --git a/common-env/src/main/java/taboolib/common/env/RuntimeDependency.java b/common-env/src/main/java/taboolib/common/env/RuntimeDependency.java index b920d5d37..0ad96d75c 100755 --- a/common-env/src/main/java/taboolib/common/env/RuntimeDependency.java +++ b/common-env/src/main/java/taboolib/common/env/RuntimeDependency.java @@ -60,4 +60,9 @@ * 是否外部库(不会被扫到) */ boolean external() default true; + + /** + * 过滤指定模块 + */ + String[] excludes() default {}; } \ No newline at end of file diff --git a/common-env/src/main/java/taboolib/common/env/RuntimeEnvDependency.java b/common-env/src/main/java/taboolib/common/env/RuntimeEnvDependency.java index 6a6e8d106..99cfe79e2 100644 --- a/common-env/src/main/java/taboolib/common/env/RuntimeEnvDependency.java +++ b/common-env/src/main/java/taboolib/common/env/RuntimeEnvDependency.java @@ -100,7 +100,7 @@ public int loadDependency(@NotNull ReflexClass clazz) throws Throwable { relocation.add(new JarRelocation(from, to)); } String url = dep.value().startsWith("!") ? dep.value().substring(1) : dep.value(); - loadDependency(url, baseFile, relocation, dep.repository(), dep.ignoreOptional(), dep.ignoreException(), dep.transitive(), dep.scopes(), dep.external()); + loadDependency(url, baseFile, relocation, dep.repository(), dep.ignoreOptional(), dep.ignoreException(), dep.transitive(), dep.scopes(), dep.external(), dep.excludes()); } } return total; @@ -130,30 +130,15 @@ public void loadDependency(@NotNull String url, @NotNull File baseDir, @Nullable loadDependency(url, baseDir, new ArrayList<>(), repository, true, false, true, Arrays.asList(DependencyScope.RUNTIME, DependencyScope.COMPILE)); } - public void loadDependency( - @NotNull String url, - @NotNull File baseDir, - @NotNull List relocation, - @Nullable String repository, - boolean ignoreOptional, - boolean ignoreException, - boolean transitive, - @NotNull List scope - ) throws Throwable { + public void loadDependency(@NotNull String url, @NotNull File baseDir, @NotNull List relocation, @Nullable String repository, boolean ignoreOptional, boolean ignoreException, boolean transitive, @NotNull List scope) throws Throwable { loadDependency(url, baseDir, relocation, repository, ignoreOptional, ignoreException, transitive, scope, true); } - public void loadDependency( - @NotNull String url, - @NotNull File baseDir, - @NotNull List relocation, - @Nullable String repository, - boolean ignoreOptional, - boolean ignoreException, - boolean transitive, - @NotNull List scope, - boolean external - ) throws Throwable { + public void loadDependency(@NotNull String url, @NotNull File baseDir, @NotNull List relocation, @Nullable String repository, boolean ignoreOptional, boolean ignoreException, boolean transitive, @NotNull List scope, boolean external) throws Throwable { + loadDependency(url, baseDir, relocation, repository, ignoreOptional, ignoreException, transitive, scope, external, new ArrayList<>()); + } + + public void loadDependency(@NotNull String url, @NotNull File baseDir, @NotNull List relocation, @Nullable String repository, boolean ignoreOptional, boolean ignoreException, boolean transitive, @NotNull List scope, boolean external, @NotNull List excludes) throws Throwable { // 支持用户对源进行替换 if (repository == null || repository.isEmpty()) { repository = defaultRepositoryCentral; @@ -170,21 +155,11 @@ public void loadDependency( } }); } else { - loadDependencyLegacy(url, baseDir, relocation, repository, ignoreOptional, ignoreException, transitive, scope, external); + loadDependencyLegacy(url, baseDir, relocation, repository, ignoreOptional, ignoreException, transitive, scope, external, excludes); } } - void loadDependencyLegacy( - @NotNull String url, - @NotNull File baseDir, - @NotNull List relocation, - String repository, - boolean ignoreOptional, - boolean ignoreException, - boolean transitive, - @NotNull List scope, - boolean external - ) throws Throwable { + void loadDependencyLegacy(@NotNull String url, @NotNull File baseDir, @NotNull List relocation, String repository, boolean ignoreOptional, boolean ignoreException, boolean transitive, @NotNull List scope, boolean external, @NotNull List excludes) throws Throwable { Artifact artifact = new Artifact(url); DependencyDownloader downloader = new DependencyDownloader(baseDir, relocation); downloader.addRepository(new Repository(repository)); @@ -192,28 +167,16 @@ void loadDependencyLegacy( downloader.setIgnoreException(ignoreException); downloader.setDependencyScopes(scope); downloader.setTransitive(transitive); + downloader.setExcludes(excludes); // 解析依赖 - String pomPath = String.format( - "%s/%s/%s/%s-%s.pom", - artifact.getGroupId().replace('.', '/'), - artifact.getArtifactId(), - artifact.getVersion(), - artifact.getArtifactId(), - artifact.getVersion() - ); + String pomPath = String.format("%s/%s/%s/%s-%s.pom", artifact.getGroupId().replace('.', '/'), artifact.getArtifactId(), artifact.getVersion(), artifact.getArtifactId(), artifact.getVersion()); File pomFile = new File(baseDir, pomPath); File pomFile1 = new File(pomFile.getPath() + ".sha1"); // 验证文件完整性 if (PrimitiveIO.validation(pomFile, pomFile1)) { downloader.loadDependencyFromInputStream(pomFile.toPath().toUri().toURL().openStream()); } else { - PrimitiveIO.println( - t("正在下载依赖 {0}:{1}:{2} {3}", "Downloading library {0}:{1}:{2} {3}"), - artifact.getGroupId(), - artifact.getArtifactId(), - artifact.getVersion(), - transitive ? t("(传递模式)", "(transitive)") : "" - ); + PrimitiveIO.println(t("正在下载依赖 {0}:{1}:{2} {3}", "Downloading library {0}:{1}:{2} {3}"), artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), transitive ? t("(传递模式)", "(transitive)") : ""); downloader.loadDependencyFromInputStream(new URL(repository + "/" + pomPath).openStream()); } // 加载自身 @@ -276,8 +239,10 @@ public void loadFromJson(String json) throws Throwable { for (int i = 0; i + 1 < relocate.size(); i += 2) { relocation.add(new JarRelocation(relocate.get(i).getAsString(), relocate.get(i + 1).getAsString())); } + List excludes = new ArrayList<>(); + array(object, "excludes").forEach((e) -> excludes.add(e.getAsString())); // 加载依赖 - loadDependency(value, new File(defaultLibrary), relocation, repository, ignoreOptional, ignoreException, transitive, scopes, external); + loadDependency(value, new File(defaultLibrary), relocation, repository, ignoreOptional, ignoreException, transitive, scopes, external, excludes); } } diff --git a/common-env/src/main/java/taboolib/common/env/legacy/DependencyDownloader.java b/common-env/src/main/java/taboolib/common/env/legacy/DependencyDownloader.java index 6661e4a94..3ca35b436 100644 --- a/common-env/src/main/java/taboolib/common/env/legacy/DependencyDownloader.java +++ b/common-env/src/main/java/taboolib/common/env/legacy/DependencyDownloader.java @@ -83,6 +83,11 @@ public class DependencyDownloader extends AbstractXmlParser { */ private boolean isTransitive = true; + /** + * 过滤指定内容 + */ + private List excludes = new ArrayList<>(); + public DependencyDownloader(@Nullable File baseDir) { this.baseDir = baseDir; } @@ -182,6 +187,9 @@ public Set loadDependency(Collection repositories, Depen singleton.add(dependency); return singleton; } + if (excludes.contains(dependency.getGroupId() + ":" + dependency.getArtifactId())) { + return new HashSet<>(); + } // 获取依赖项的 pom 文件和 jar 文件 File pom = dependency.findFile(baseDir, "pom"); File pom1 = new File(pom.getPath() + ".sha1"); @@ -358,4 +366,12 @@ public boolean isTransitive() { public void setTransitive(boolean transitive) { isTransitive = transitive; } + + public List getExcludes() { + return excludes; + } + + public void setExcludes(List excludes) { + this.excludes = excludes; + } }