98 lines
2.3 KiB
Markdown
98 lines
2.3 KiB
Markdown
---
|
||
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()
|
||
``` |