Files
boybook 760c2dd9ad 2.6
2025-12-01 20:59:16 +08:00

98 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 {
/**
* 依赖地址,格式为:
* <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>
*/
String value();
/**
* 测试类
* <p>
* <code>
* test = "!org.bukkit.Bukkit" // 前面带个感叹号避免在编译时重定向
* </code>
*/
String test() default "";
/**
* 仓库地址,留空默认使用 <a href="https://maven.aliyun.com/repository/central">阿里云中央仓库</a>
*/
String repository() default "";
/**
* 是否进行依赖传递
*/
boolean transitive() default true;
/**
* 忽略可选依赖
*/
boolean ignoreOptional() default true;
/**
* 忽略加载异常
*/
boolean ignoreException() default false;
/**
* 依赖范围
*/
DependencyScope[] scopes() default {DependencyScope.RUNTIME, DependencyScope.COMPILE};
/**
* 依赖重定向
* <p>
* <code>
* relocate = ["!taboolib.", "!taboolib610."] // 同 test 参数
* </code>
*/
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()
```