MCIO Plugins MCIO Plugins
首页
爱发电 (opens new window)
无法下载? (opens new window)

人间工作P

我每天都好困… 最近在学习和进行 VOCALOID 创作
首页
爱发电 (opens new window)
无法下载? (opens new window)
  • PluginBase

    • PluginBase 简介
    • 构建脚本
    • 插件元数据
    • 插件主类
    • 一些工具
    • 菜单
    • 菜单配置文件
    • Vault 经济
    • 数据库连接池
    • Adventure 支持
    • 本地化系统
    • 依赖下载
    • 依赖下载 简易版
      • Libraries Resolver Lite
      • 开始使用
      • 使用示例
      • 注意事项
  • Item-NBT-API

  • VectorDisplays

  • 开发文档
  • PluginBase
2025-10-23
目录

依赖下载 简易版

<< 返回开发文档

# 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
<!-- 暂不支持在 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
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

还要在插件元数据里加个 libraries 随便丢个依赖进去。
这个字段用于激活高版本自带的依赖库 ClassLoader,使得 LibrariesResolver 可以注入到这个类加载器,增加兼容性。

// plugin.yml
libraries:
- "org.jetbrains:annotations:24.0.0"
1
2
3

# 注意事项

请将需要使用依赖库的类的引用,给放到其它类,而不是放在插件主类。以免在依赖开始下载之前,因为找不到类报错导致无法正常初始化。

例如,你使用 LibrariesResolver-Lite 来下载并链接 adventure-platform-bukkit,那么就尽可能不要在主类里使用 adventure 相关功能,以免未链接依赖导致报错。除非你对你写的代码会在何时执行,有十足的把握。

上次更新: 2025/10/22, 18:02:32
依赖下载
Item-NBT-API 简介

← 依赖下载 Item-NBT-API 简介→

Theme fork from Vdoing | Copyright © 2018-2025 人间工作P | 到爱发电支持我

除非特别说明,本站点所有文章均以 CC BY-SA 协议授权

《我的世界》和《Minecraft》是微软公司和 Mojang Synergies AB 的商标,本站点与微软公司等没有从属关系。

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式