使用Java 10的jaotc编译单个类

Oli*_*ver 5 java aop java-10 jaotc

我想编译一个Java 10类文件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)
Run Code Online (Sandbox Code Playgroud)

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

Nam*_*man 1

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

如果您查看第 135 行的代码,会发现

printer.printInfo(classesToCompile.size() + " classes found");
Run Code Online (Sandbox Code Playgroud)

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

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

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