5

我想用jaotc. 虽然我能够构建 Java 10 模块的共享库,但我无法弄清楚如何编译单个类。我班的 FQCN 是net.sweblog.jm18.aot.hw.HelloWorld,它的完整路径是target/classes/net/sweblog/jm18/aot/hw/HelloWorld.class.

所以尝试jaotc如下调用:

$ jaotc --output output/helloworld.so \
    --search-path helloworld/target/classes/ \
    --class-name net.sweblog.jm18.aot.hw.HelloWorld

Error: Failed to find class file: net.sweblog.jm18.aot.hw.HelloWorld
java.lang.NullPointerException
    at jdk.aot/jdk.tools.jaotc.Main.run(Main.java:135)
    at jdk.aot/jdk.tools.jaotc.Main.run(Main.java:101)
    at jdk.aot/jdk.tools.jaotc.Main.main(Main.java:80)

有谁知道如何jaotc正确调用来编译我的类文件?

4

1 回答 1

1

当工具在指定或(如果在arg 中指定)中NullPointerException找不到要编译的类时,可能会抛出。searchPathfiles--jar

如果您查看Line#135处的代码

printer.printInfo(classesToCompile.size() + " classes found");

如果classesToCompile为 null 则可能抛出 NPE,仅当在指定路径中查找类失败时才会出现这种情况

try {
    foundClasses = lookup.search(this.main.options.files, this.main.options.searchPath);
} catch (InternalError var7) {
    this.main.printer.reportError(var7);
    return null;
}

因此,我建议验证您指定的搜索路径。我也怀疑将类名指定net.sweblog.jm18.aot.hw.HelloWorld给编译器,如果我在javac这里进行类比没有错,那么编译类或源类都需要完整的路径。

于 2018-05-09T04:28:15.180 回答