是否有可能通过使用JSR 223 Java Scripting API获得在带有特定注释修饰的Kotlin脚本文件(* .kts)中的所有顶级功能,而无需修改和评估脚本(即,仅通过编译即可) Java脚本API编写脚本)?
要求是能够获取脚本中函数的元数据。函数名称是预先未知的,这些函数只会在以后调用。对于以任何JVM语言实现编写的脚本,只要支持JSR 223(Kotlin,Groovy,JavaScript,JRuby等),它都应该以通用方式工作。
一个测试项目如下所示。
测试项目结构:
$(el).data('date')
pom.xml:
+---script-functions
| | pom.xml
| |
| +---src
| | +---main
| | | +---java
| | | | \---scriptfun
| | | | Main.java
| | | | MyAnnotation.java
| | | |
| | | \---resources
| | | \---META-INF
| | | \---services
| | | javax.script.ScriptEngineFactory
MyAnnotation.java:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>script-tests</groupId>
<artifactId>script-functions</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<kotlin.version>1.3.21</kotlin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-script-util</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-compiler-embeddable</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</project>
Main.java:
package scriptfun;
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
}