--- front: hard: 入门 time: 10分钟 --- # 动态依赖 一般在开发Bukkit插件时,开发者想要引入第三方库基本需要将库打包在插件本体中 这样会使插件显得非常臃肿,所以一种十分“优雅”的加载方式就诞生了 > 该功能在后续添加的时候会因为cache导致无法运行,需要删除重新加载才能运行 ## 单个依赖 ```kotlin @RuntimeDependency(value = "!com.google.code.gson:gson:2.10.1", relocate = ["!com.google.gson","!com.example.library.gson"]) object Example : Plugin() ``` 这样在插件启动的时候就会载入Google的GSON到服务器中 ## 方法详解 让我们来看看这个方法有什么参数 ```kotlin @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Repeatable(RuntimeDependencies.class) public @interface RuntimeDependency { /** * 依赖地址,格式为: * :[:[:]]: */ String value(); /** * 测试类 *

* * test = "!org.bukkit.Bukkit" // 前面带个感叹号避免在编译时重定向 * */ String test() default ""; /** * 仓库地址,留空默认使用 阿里云中央仓库 */ String repository() default ""; /** * 是否进行依赖传递 */ boolean transitive() default true; /** * 忽略可选依赖 */ boolean ignoreOptional() default true; /** * 忽略加载异常 */ boolean ignoreException() default false; /** * 依赖范围 */ DependencyScope[] scopes() default {DependencyScope.RUNTIME, DependencyScope.COMPILE}; /** * 依赖重定向 *

* * relocate = ["!taboolib.", "!taboolib610."] // 同 test 参数 * */ String[] relocate() default {}; /** * 是否外部库(不会被扫到) */ boolean external() default true; } ``` ## 变体 - 多个依赖 ```kotlin @RuntimeDependencies( RuntimeDependency(value = "!com.google.code.gson:gson:2.10.1", relocate = ["!com.google.gson","!com.example.library.gson"]), RuntimeDependency(value = "!com.github.ben-manes.caffeine:caffeine:2.9.3", relocate = ["!com.github.benmanes.caffeine","!com.example.library.caffeine"]) ) object Example : Plugin() ```