使用Java脚本API在Kotlin脚本(和其他JVM语言脚本)中获取带注释的函数

时间:2019-03-20 13:30:05

标签: java kotlin jsr223

是否有可能通过使用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 {
}

0 个答案:

没有答案