J'ai un projet de recherche (implémenté en Java 8) qui comprend plusieurs classes, plusieurs fonctions principales et bien plus de 10000 lignes de code, dans Eclipse. Le programme manque de mémoire lorsque l'entrée n'est pas petite.
Je voulais voir s'il utilisait moins de mémoire Stack, s'il était compilé comme une application native.
Je n'ai trouvé aucun moyen de le faire dans Eclipse.
Je l'ai fait.$GRAALVM_HOME/bin/javac /home/appu/Downloads/2019/June/20/HelloWorld.java
Ça a marché. J'ai un binaire qui fonctionne.
J'ai essayé/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
J'ai Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class' not found.
J'ai essayé/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/*
J'ai Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi' not found.
Le classique
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
est compilé dans "HelloWorld.class"
ce qui donne un exécutable "helloworld" qui est exécutable (application/x-executable).
Puis-je avoir la même chose, à partir d'Eclipse ? Puis-je avoir la même chose en ligne de commande, pour les fichiers multiclasses ?
Lorsque je change le code ci-dessus en
public class HelloWorld
{
public static void hello()
{
System.out.println("Hello, World!");
}
}
et ajouter une autre classe
public class Main
{
public static void main(String[] args)
{
HelloWorld.hello();
}
}
Ils compilent correctement, mais j'obtiens
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
Ce que je veux, c'est un fichier exécutable (dans mon cas, un exécutable Gnu/Linux) qui peut être utilisé comme un exécutable natif.
Je préfère une solution à partir d'Eclipse, mais la ligne de commande, Netbeans, VS Code, ... ou toute autre technique est la bienvenue.
En réponse à la réponse de BoriS :
J'ai essayé de créer un jar il y a quelques heures, et j'ai créé un fichier appelé Main. Cela n'a pas fonctionné.
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
Lorsque j'ai exécuté Main qui est de type exécutable (application/x-exécutable), j'ai obtenu
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