如何在Eclipse中使用GraalVM(SubstrateVM)将Java编译为本机

如何在Eclipse中使用GraalVM(SubstrateVM)将Java编译为本机,java,eclipse,graalvm,substratevm,Java,Eclipse,Graalvm,Substratevm,我有一个研究项目(用Java8实现)将在Eclipse中实现几个类、几个主要函数和超过10000行代码。当输入不小时,程序内存不足 我想看看如果将其编译为本机应用程序,它是否会使用更少的堆栈内存 我在Eclipse中找不到这样做的方法 我做了 $GRAALVM_HOME/bin/javac/HOME/appu/Downloads/2019/June/20/HelloWorld.java 成功了。我有一个工作二进制文件 我试过了 /home/appu/Downloads/Apps/GraalVM/

我有一个研究项目(用Java8实现)将在Eclipse中实现几个类、几个主要函数和超过10000行代码。当输入不小时,程序内存不足

我想看看如果将其编译为本机应用程序,它是否会使用更少的堆栈内存

我在Eclipse中找不到这样做的方法

我做了
$GRAALVM_HOME/bin/javac/HOME/appu/Downloads/2019/June/20/HelloWorld.java

成功了。我有一个工作二进制文件

我试过了
/home/appu/Downloads/Apps/GraalVM/2019-06-20/GraalVM-ee-19.0.2/bin/native-image/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/decimate.class

我找到了
Main入口点类'/home/appu/eclipse-nimi/nimishagralee19/bin/nimi/decimate/decimate.class'。

我试过了
/home/appu/Downloads/Apps/GraalVM/2019-06-20/GraalVM-ee-19.0.2/bin/native-image/home/appu/eclipse-nimi/NimishaGraalEE19/bin/*

我找到了
Main入口点类'/home/appu/eclipse-nimi/nimishagralee19/bin/nimi'。

经典

public class HelloWorld
{
    public static void main(String[] args)
    {
        System.out.println("Hello, World!");
    }
}
被编译成“HelloWorld.class”

它给出了一个可执行文件“helloworld”,它是可执行的(应用程序/x-可执行文件)

我可以从Eclipse中得到同样的吗?对于多类文件,可以在命令行中使用相同的命令吗

当我把上面的代码改成

public class HelloWorld
{
    public static void hello()
    {
        System.out.println("Hello, World!");
    }
}
并添加另一个类

public class Main
{
    public static void main(String[] args)
    {
        HelloWorld.hello();
    }
}
它们编译正确,但我得到

appu[23]/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/Downloads/2019/June/23/HelloWorld.class 
Build on Server(pid: 17223, port: 36631)                                                          
[/home/appu/downloads/2019/june/23/helloworld.class:17223]    classlist:     415.66 ms            
Error: Main entry point class '/home/appu/Downloads/2019/June/23/HelloWorld.class' not found.     
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception             
Error: Image build request failed with exit status 1                                              
appu[23]ls                                                                                        
HelloWorld.class  HelloWorld.java  Main.class  Main.java
我想要的是一个可执行文件(在我的例子中是Gnu/Linux可执行文件),它可以用作本机可执行文件

我更喜欢Eclipse的解决方案,但命令行、Netbeans、VS代码。。。或者任何其他技术都是受欢迎的


针对BoriS的回答:

几个小时前我试着制作一个jar,并制作了一个名为Main的文件。它不起作用

jar cfe Main.jar Main Main.class
/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image -jar /home/appu/Downloads/2019/June/23/Main.jar
./Main
当我运行Main时,它是可执行的(application/x-executable)类型,我得到

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
        at Main.main(Main.java:5)
Caused by: java.lang.ClassNotFoundException: HelloWorld
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more
文档()中有两个选项:

1) 为您的项目构建一个jar,并从中构建一个本机映像

本机映像[选项]-jar jarfile
为jar文件构建映像

2) 正确设置本机映像类路径,并为本机映像提供所需的主映像

您可以为本机映像构建提供其他选项:
-cp
-class path
帮助通过目录、JAR存档和ZIP存档的单独列表搜索类文件

native image[options]类
为当前工作目录中的类构建可执行文件。调用它将执行该类的本机编译代码


转到命令行。@Thorbjørnravandersen如何?我只能为单类程序制作本机映像。即使主课是指另一门课,我也做不到。谢谢你的回答。但是,这并没有起作用。请看我的更新。你能建议我在终端中输入哪些命令吗?从我在你的编辑中看到的来看,你创建了一个只有一个类的jar。非常感谢。成功了。因此,过程是,通过EclipseIDE导出到jar,然后使用“native image-jar Main.jar”(在我的例子中是/home/appu/Downloads/Apps/GraalVM/2019-06-20/GraalVM-ee-19.0.2/bin/native-image-jar Main.jar)。这是正确的答案。因为我是一个新用户,所以我无法升级它。我选择了它作为正确的答案。