Java库生成JavaScript代码

时间:2017-04-27 14:11:08

标签: javascript java code-generation jsr223

我需要从Java程序中生成JavaScript(ECMAScript)代码。为此,我正在寻找像JavaPoet这样的东西,但是将JavaScript作为输出。

我无法使用其中一种将其他语言翻译成JavaScript的转换器(例如GWT不是答案),也不能使用从语法树生成JavaScript的工具(只有当有一个库可以帮助构建语法树时... )。

像已经提到过的JavaPoet之类的东西就是答案,因为它在内存使用和代码大小方面的占用空间非常小。

生成的JavaScript代码的目标是Java / JSR 223(Nashorn),如果这是相关的。

要指定要求:JavaPoet使用此代码

string data = @"<div class=""item"" attr=""abc"">VALUE I NEED TO GET</div>
<div class=""item"" data-attr=""def"">VALUE I NEED TO GET</div>
<div class=""item"" something-else=""xyz"">VALUE I NEED TO GET</div>
<div class=""item"" other=""123"">VALUE I NEED TO GET</div>";

Regex.Matches(data, @"(?<=>)(?![\r\n])([^<]+)")
     .OfType<Match>()
     .Select(itm => itm.Groups[1].Value);

创建此Java代码

MethodSpec main = MethodSpec.methodBuilder("main")
    .addModifiers(Modifier.PUBLIC, Modifier.STATIC)
    .returns(void.class)
    .addParameter(String[].class, "args")
    .addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
    .build();

TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
    .addModifiers(Modifier.PUBLIC, Modifier.FINAL)
    .addMethod(main)
    .build();

JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
    .build();
javaFile.writeTo(System.out);

(我已经从JavaPoet项目网站复制了样本。)

我希望有类似的东西代替创建JavaScript代码。

据我所知,StringBuilder实际上最接近这个要求。首先生成Java以将其转换为JavaScript应该可以工作,但对我来说看起来真的很奇怪 - 而且是全部,但不是真正的轻量级。与首先生成Kotlin或Ceylon代码然后将其转换为JavaScript相同。

1 个答案:

答案 0 :(得分:1)

我知道你不想要一个转换器,但是因为似乎没有你想要的javascript生成器,可能一个轻量级的java-js转换器可以完成这项工作。

尝试使用javapoet生成一些java,然后让输出通过jsweet转换器,有一个online沙箱,您可以使用它来查看输出,然后再决定它是否为最好的选择。