Как скомпилировать Java в Native с использованием GraalVM (SubstrateVM) в Eclipse - PullRequest
0 голосов
/ 23 июня 2019

У меня исследовательский проект (реализованный в Java 8) будет несколько классов, несколько основных функций и более 10000 строк кода в Eclipse.Программе не хватает памяти, когда ввод не маленький.

Я хотел посмотреть, будет ли она использовать меньше стековой памяти, если она скомпилирована как собственное приложение.

Я не нашел способасделать это в 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 entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class' not found.

Я пытался
/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/*
Я получил Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi' not found.

Классический

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

компилируется в "HelloWorld.class"

, который дает исполняемый "helloworld", который является исполняемым (application / 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 Code, ... или любая другая техника приветствуется.


В ответ на ответ BoriS:

Я попытался сделать банкуНесколько часов назад и сделал файл с именем 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-исполняемый) тип, я получил

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 Ответ

0 голосов
/ 24 июня 2019

Два варианта из документов (https://www.graalvm.org/docs/reference-manual/aot-compilation/):

1) Создайте флягу своего проекта и создайте из этого нативный образ

native-image [options] -jar jarfile для создания образа для файла jar.

2) Правильно установите путь к классу исходного изображения и задайте нужное основное изображение.

Вы можете предоставить дополнительные параметры для создания собственного изображения: -cp и --class-path помогают искать файлы классов по отдельному списку каталогов, JAR-архивам и ZIP-архивам;

native-image [options] class для создания исполняемого файла для класса в текущем рабочем каталоге. Вызывая его, мы скомпилировали собственный код этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...