AviatorScript 是一门寄生在 JVM (Hosted on the JVM)上的语言,类似 clojure/scala/kotlin 等等。我们先从一个 hello world 例子开始。

从 Java 中调用

首先,在你的 java 项目里引用下 AviatorScript 的依赖:

  1. <dependency>
  2. <groupId>com.googlecode.aviator</groupId>
  3. <artifactId>aviator</artifactId>
  4. <version>{version}</version>
  5. </dependency>

version 版本可以在 maven 找到,本指南编写的版本面向 5.0.0 及以上版本, 5.0 以下请参考老版本的用户指南

接下来编写你的第一个 AviatorScript 脚本,放到项目的根目录下的 examples 子目录

  1. ## examples/hello.av
  2. println("hello, AviatorScript!");

其中 ## examples/hello.av 是注释,说明例子所在的文件(后续的例子都将带上这个说明,你可以在 examples 目录找到所有的例子。
这段代码非常简单,调用 println 函数,打印字符串 hello, AviatorScript!

其次,编写一个类来运行测试脚本:

  1. import com.googlecode.aviator.AviatorEvaluator;
  2. import com.googlecode.aviator.Expression;
  3. import com.googlecode.aviator.Options;
  4. /**
  5. * Run a script under examples folder.
  6. *
  7. * @author dennis(killme2008@gmail.com)
  8. *
  9. */
  10. public class RunScriptExample {
  11. public static void main(final String[] args) throws Exception {
  12. // Compile the script into a Expression instance.
  13. Expression exp = AviatorEvaluator.getInstance().compileScript("examples/hello.av");
  14. // Run the exprssion.
  15. exp.execute();
  16. }
  17. }

其实你可以直接 clone aviator 的仓库 https://github.com/killme2008/aviator/ ,运行其中的 RunScriptExample 就可以测试 examples 目录下的所有例子。

这段代码逻辑很简单:

  1. 使用 AviatorEvaluatorInstance#compileScript 方法编译脚本到 Expression 对象
  2. 调用 Expression#execute() 方法执行

输出:

  1. hello, AviatorScript!

其中两行是日志,打印的就是 hello, AviatorScript!

这样就完成了一个你的第一个 AviatorScript 的编写、编译和执行。从 Java 中调用脚本还可以采用 Java 的 Scripting API,参见《附录2 Java Scripting API 支持》。

aviator 命令行

AviatorScript 还提供了一个命令行工具,方便地直接执行脚本。

安装和执行

  1. 安装,请下载 aviator 文件,保存到某个在系统 PATH 路径里的目录(比如 ~/bin ):

    1. $ wget https://raw.githubusercontent.com/killme2008/aviator/master/bin/aviator
    2. --2020-04-26 21:41:04-- https://raw.githubusercontent.com/killme2008/aviator/master/bin/aviator
    3. Resolving localhost (localhost)... ::1, 127.0.0.1
    4. Connecting to localhost (localhost)|::1|:1081... failed: Connection refused.
    5. Connecting to localhost (localhost)|127.0.0.1|:1081... connected.
    6. Proxy request sent, awaiting response... 200 OK
    7. Length: 5289 (5.2K) [text/plain]
    8. Saving to: aviator
  2. 修改为可执行:

    1. $ chmod u+x aviator
  3. 执行命令,会自动下载并安装 aviator jar 文件到 ~/.aviatorscript 目录下:

    1. $ aviator
    2. Downloading AviatorScript now...
    3. % Total % Received % Xferd Average Speed Time Time Time Current
    4. Dload Upload Total Spent Left Speed
    5. 100 153 100 153 0 0 94 0 0:00:01 0:00:01 --:--:-- 94
    6. 100 505k 100 505k 0 0 199k 0 0:00:02 0:00:02 --:--:-- 663k
    7. Usage: java com.googlecode.aviator.Main [file] [args]
    8. : java com.googlecode.aviator.Main -e [script]
    9. : java com.googlecode.aviator.Main -v
  4. 将下列脚本保存为文件 hello.av

    1. p('Hello, AviatorScript!');
  5. 执行脚本:

    1. $ aviator hello.av
    2. Hello, AviatorScript!
  6. 也可以直接在命令行执行一段脚本,通过 -e 选项: ```bash $ aviator -e “p(‘Hello, AviatorScript!’);” Hello, AviatorScript! null

  1. 最后的 null 是整个表达式的执行结果。
  2. <a name="RYczP"></a>
  3. ### 命令行参数
  4. 在脚本中可以通过 `ARGV` 数组来访问到:
  5. ```javascript
  6. p("ARGV count is: " + count(ARGV));
  7. for arg in ARGV {
  8. p(arg);
  9. }
  10. p("ARGV[0] = " + ARGV[0]);

保存为 test.av 并执行:

  1. $ aviator test.av 1 2 3
  2. ARGV count is: 3
  3. 1
  4. 2
  5. 3
  6. ARGV[0] = 1

我们传入了命令行参数 1 2 3 ,因此 count(ARGV) 返回 3,通过 for 循环迭代了数组并打印,最终我们还单独打印了 ARGV[0] ,也就是第一个命令行参数。

升级和其他命令

可以通过 upgrade 来升级 AviatorScript:

  1. $ aviator upgrade
  2. The script at /Users/boyan/bin/aviator will be upgraded to the latest stable version.
  3. Do you want to continue [Y/n]? Y
  4. Upgrading...
  5. /Users/boyan/bin/aviator: line 123: [darwin18: command not found
  6. % Total % Received % Xferd Average Speed Time Time Time Current
  7. Dload Upload Total Spent Left Speed
  8. 100 137 100 137 0 0 99 0 0:00:01 0:00:01 --:--:-- 99
  9. 100 5289 100 5289 0 0 2700 0 0:00:01 0:00:01 --:--:-- 5165k
  10. The self-install jar already exists at /Users/boyan/.aviatorscript/self-installs/aviator-5.0.0.jar.
  11. If you wish to re-download, delete it and rerun "/Users/boyan/bin/aviator self-install".

因为当前已经是最新版本,所以不会重新安装。

安装文件在 ~/.aviatorscript/self-installs/ 下,可以删除重新执行 aviator 就会重新安装。

查看版本通过 -v 选项:

  1. $ aviator -v
  2. AviatorScript 5.0.0-RC3-SNAPSHOT

2.1 编译和执行