依赖下载 简易版
# Libraries Resolver Lite
用于在插件刚实例化完成时下载依赖库,这个模块是精简版,尽可能地利用现有工具,改变实现思路,压缩储存空间。
# 开始使用
获取版本:Maven Central (opens new window)
(LibrariesResolver-Lite 与 PluginBase 版本号同步)
repositories {
mavenCentral()
}
// Gradle
dependencies {
implementation("top.mrxiaom:LibrariesResolver-Lite:$VERSION")
}
1
2
3
4
5
6
7
2
3
4
5
6
7
<!-- 暂不支持在 Maven 使用 -->
1
请自行配置 shadowJar,并做好 relocation 操作 (将 top.mrxiaom.pluginbase.resolver 重定向到你的包中),LibrariesResolver-Lite 需要打包到你的程序内。
# 使用示例
必须要与 buildconfig 以及 LibrariesResolver-Gradle 一同使用,同步构建脚本与运行时插件的依赖信息。
// build.gradle.kts
plugins {
id("java")
id("com.github.gmazzo.buildconfig") version "5.6.7"
}
buildscript {
repositories.mavenCentral()
dependencies.classpath("top.mrxiaom:LibrariesResolver-Gradle:$VERSION")
}
val base = top.mrxiaom.gradle.LibraryHelper(project)
dependencies {
base.library("net.kyori:adventure-api:4.22.0")
base.library("net.kyori:adventure-platform-bukkit:4.4.0")
base.library("net.kyori:adventure-text-serializer-gson:4.22.0")
base.library("net.kyori:adventure-text-minimessage:4.22.0")
implementation("top.mrxiaom:LibrariesResolver-Lite:$VERSION") { isTransitive = false }
}
buildConfig {
className("BuildConstants")
packageName("com.example.your.plugin")
base.doResolveLibraries()
// buildConfigField("String", "VERSION", "\"${project.version}\"")
// buildConfigField("java.time.Instant", "BUILD_TIME", "java.time.Instant.ofEpochSecond(${System.currentTimeMillis() / 1000L}L)")
buildConfigField("String[]", "RESOLVED_LIBRARIES", base.join())
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.example.your.plugin;
import top.mrxiaom.pluginbase.resolver.DefaultLibraryResolver;
import top.mrxiaom.pluginbase.resolver.repository.RemoteRepository;
import top.mrxiaom.pluginbase.resolver.utils.ClassLoaderWrapper;
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.List;
import java.util.logging.Logger;
/**
* 插件主类
*/
public class ExamplePlugin extends JavaPlugin {
private final ClassLoaderWrapper classLoader;
public ExamplePlugin() throws Exception {
this.classLoader = ClassLoaderWrapper.resolve((URLClassLoader) getClassLoader());
getLogger().info("正在检查依赖库状态");
File librariesDir = ClassLoaderWrapper.isSupportLibraryLoader
? new File("libraries")
: new File(this.getDataFolder(), "libraries");
DefaultLibraryResolver resolver = new DefaultLibraryResolver(getLogger(), librariesDir);
// 也可以使用其它仓库。为了精简本项目大小,不支持需要身份验证的仓库,只支持公开仓库
// List<RemoteRepository> repositories = Arrays.asList(
// new RemoteRepository("papermc", "https://repo.papermc.io/repository/maven-public"),
// new RemoteRepository("codemc", "https://repo.codemc.io/repository/maven-public")
// );
// DefaultLibraryResolver resolver = new DefaultLibraryResolver(logger, librariesDir, repositories);
resolver.addResolvedLibrary(BuildConstants.RESOLVED_LIBRARIES);
List<URL> libraries = resolver.doResolve();
getLogger().info("正在添加 " + libraries.size() + " 个依赖库到类加载器");
for (URL library : libraries) {
this.classLoader.addURL(library);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
还要在插件元数据里加个 libraries 随便丢个依赖进去。
这个字段用于激活高版本自带的依赖库 ClassLoader,使得 LibrariesResolver 可以注入到这个类加载器,增加兼容性。
// plugin.yml
libraries:
- "org.jetbrains:annotations:24.0.0"
1
2
3
2
3
# 注意事项
请将需要使用依赖库的类的引用,给放到其它类,而不是放在插件主类。以免在依赖开始下载之前,因为找不到类报错导致无法正常初始化。
例如,你使用 LibrariesResolver-Lite 来下载并链接
adventure-platform-bukkit,那么就尽可能不要在主类里使用 adventure 相关功能,以免未链接依赖导致报错。除非你对你写的代码会在何时执行,有十足的把握。
上次更新: 2025/10/22, 18:02:32