OVH Cloud OVH Cloud

Vrai programme Java stand-alone ?

12 réponses
Avatar
O.L.
Bonjour,

Je croyais que MS Visual J++ permettait de compiler ses programmes en
applications stand-alone (.exe), mais je viens de lire dans la FAQ de
MS que l'on devait en fait redistribuer les .class de son programmes et
jview.exe ...
Qu'en est il vraiment ? Car il me semble pourtant avoir déjà vu des
logiciels programmés en Java donnés sous forme d'un unique exécutable
...

Merci d'avance pour vos éclairements :-/
Olivier L.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

10 réponses

1 2
Avatar
cho7
Qu'en est il vraiment ? Car il me semble pourtant avoir déjà vu des
logiciels programmés en Java donnés sous forme d'un unique exécutab le


En fait ils sont programmés en java oui, mais pas totalement

Réponse un peu plus poussée, avec même un peu d'hors sujet pour la
culture g :

La technique des ces fameux stand-alone est simple : ils embarquent une
jvm à bord (ce n'est donc pas du natif à proprement parler)

Il faut donc créer le 1er maillon dans un langage compilant en natif. Ce
1er maillon se chargera de décompiler dans un repertoire temporaire la
jvm, le .jar du programme, et lancera ensuite le tout, pour enfin
nettoyer le tmp un fois l'application java terminée : en C j'arrive a
créer un fichier qui m'extrait la jvm à la volée dans un repertoire
temporaire, et qui lance mon .jar, lui aussi embarqué a bord de mon
executable, ca prend 1 seconde (je suis sous linux parcontre)

Le vrai "défi" est en revanche "comment minimiser la taille de la jvm au
maximum"
Je ne m'etais pas trop pris la tête, mais mon executable faisait 18Mo
(pour un jar de quelques ko !)

Les soft spécialisés dans le genre produisent des jvm de 5Mo, comment
font-elle ? je n'en sais rien, mon rt.jar de la jvm faisait déjà 39Mo
non compressé, 8 après compression (de mémoire), donc je ne vois pas
comment arriver à 5Mo, si ce n'est en parsant toutes les classes
utilisées par le .jar (via les api de reflection) et ainsi épurer le
rt.jar (qui est le plus gros fichier de la jvm)

Mais bon, si tu veux mon avis, un .exe (ou peut importe l'extension si
on est sous linux), c'est pas trop dans la philosophie de java.

Java c'est pas du natif, faut se faire une raison, alors après si c'est
pour empecher les décompilations sauvages, ca peut en freiner certains
si on ne diffuse un soft qu'en binaire, mais les ptits malins (sous
linux avec la commande fuser par exemple) sauront très vite s'apercevoir
où le programme décompresse ses fichiers temporaires et pourront dès
lors accéder au .jar

Donc pour en revenir au thread initial, je ne sais pas comment
fonctionne msvj++ (pas de windows), mais effectivement c'est possible de
créer des executable lancant des applis java

Voilà, en esperant t'avoir un peu éclairer
--
cho7
"Plus grosse est la pomme, plus gros est le ver" - cho7, 2005

Avatar
O.L.
cho7 a exposé le 29/05/2005 :
Qu'en est il vraiment ? Car il me semble pourtant avoir déjà vu des
logiciels programmés en Java donnés sous forme d'un unique exécutable


En fait ils sont programmés en java oui, mais pas totalement

Réponse un peu plus poussée, avec même un peu d'hors sujet pour la
culture g :

La technique des ces fameux stand-alone est simple : ils embarquent une
jvm à bord (ce n'est donc pas du natif à proprement parler)

Il faut donc créer le 1er maillon dans un langage compilant en natif. Ce
1er maillon se chargera de décompiler dans un repertoire temporaire la
jvm, le .jar du programme, et lancera ensuite le tout, pour enfin
nettoyer le tmp un fois l'application java terminée : en C j'arrive a
créer un fichier qui m'extrait la jvm à la volée dans un repertoire
temporaire, et qui lance mon .jar, lui aussi embarqué a bord de mon
executable, ca prend 1 seconde (je suis sous linux parcontre)

Le vrai "défi" est en revanche "comment minimiser la taille de la jvm au
maximum"
Je ne m'etais pas trop pris la tête, mais mon executable faisait 18Mo
(pour un jar de quelques ko !)

Les soft spécialisés dans le genre produisent des jvm de 5Mo, comment
font-elle ? je n'en sais rien, mon rt.jar de la jvm faisait déjà 39Mo
non compressé, 8 après compression (de mémoire), donc je ne vois pas
comment arriver à 5Mo, si ce n'est en parsant toutes les classes
utilisées par le .jar (via les api de reflection) et ainsi épurer le
rt.jar (qui est le plus gros fichier de la jvm)

Mais bon, si tu veux mon avis, un .exe (ou peut importe l'extension si
on est sous linux), c'est pas trop dans la philosophie de java.

Java c'est pas du natif, faut se faire une raison, alors après si c'est
pour empecher les décompilations sauvages, ca peut en freiner certains
si on ne diffuse un soft qu'en binaire, mais les ptits malins (sous
linux avec la commande fuser par exemple) sauront très vite s'apercevoir
où le programme décompresse ses fichiers temporaires et pourront dès
lors accéder au .jar

Donc pour en revenir au thread initial, je ne sais pas comment
fonctionne msvj++ (pas de windows), mais effectivement c'est possible de
créer des executable lancant des applis java

Voilà, en esperant t'avoir un peu éclairer


Ah ça oui, tu m'as beaucoup éclairé ! :) Merci bien :-]
Je ne pensais pas du tout que ça marchait comme ça ...
Ce qui m'étonne, c'est que légalement la runtime de Sun ne peut être
distribuée qu'en intégralité, donc je ne vois pas non plus comment font
ces softs pour arriver à 5Mo :-/
Mon but n'est absolument pas de protéger la source de mon prog, au
contraire je pense le mettre en open-source.

Merci encore pour toutes ces infos !

@+
Olivier

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


Avatar
O.L.
Je viens de regarder dans mon Program Files, et j'ai trouvé un logiciel
commercial écrit en Java qui tourne avec sa JRE, et cette JRE fait ...
moins de 3 Mo ! En fait c'est la version 1.1.6, mais je ne sais pas si
elle est complète ou s'il manque des bouts, a priori je dirais qu'elle
est entière.

Manque de bol pour moi, j'ai trouvé ça dans la license :
"agrees to incorporate the most current version of the Software that
was available 180 days prior to each production release of the Program"
Bref, c'est trop vieux, j'ai pas le droit d'utiliser cette JRE light !
:(

Je continue mes investigations ...

@+
O.L.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com
Avatar
cho7
Je viens de regarder dans mon Program Files, et j'ai trouvé un logiciel
commercial écrit en Java qui tourne avec sa JRE, et cette JRE fait ...
moins de 3 Mo ! En fait c'est la version 1.1.6, mais je ne sais pas si
elle est complète ou s'il manque des bouts, a priori je dirais qu'elle
est entière.
3Mo ?? Je doute qu'elle soit entière, ou alors Java 2 a ammené des prog rès considérable :)

Combien pèse le fichier rt.jar dans /lib ? C'est le jar contenant la
majorité des classes java

Autrement, bien qu'ayant expliqué que la majorité des softs connus ne
faisaient qu'embarquer une jvm, je n'exclu pas la possibilité de
compiler une sorte de code natif à partir d'un code java.
D'ailleurs, sous linux, le compilateur gcj le fait.

Maintenant je ne suis pas un spécialiste windows, donc avis aux
amateurs :)

Je continue mes investigations ...


ok tiens nous au courant

--
cho7
"Plus grosse est la pomme, plus gros est le ver" - cho7, 2005

Avatar
O.L.
cho7 avait écrit le 29/05/2005 :
Je viens de regarder dans mon Program Files, et j'ai trouvé un logiciel
commercial écrit en Java qui tourne avec sa JRE, et cette JRE fait ...
moins de 3 Mo ! En fait c'est la version 1.1.6, mais je ne sais pas si
elle est complète ou s'il manque des bouts, a priori je dirais qu'elle
est entière.
3Mo ?? Je doute qu'elle soit entière, ou alors Java 2 a ammené des progrès

considérable :) Combien pèse le fichier rt.jar dans /lib ? C'est le jar
contenant la majorité des classes java
Il pèse 1.4 Mo ...

J'ai fait un dump complet de sa structure :
http://olivier.ligny.free.fr/rt-list.zip (html zippé).


Autrement, bien qu'ayant expliqué que la majorité des softs connus ne
faisaient qu'embarquer une jvm, je n'exclu pas la possibilité de
compiler une sorte de code natif à partir d'un code java.
D'ailleurs, sous linux, le compilateur gcj le fait.
Sous Windows GCJ est sensé le faire aussi, et MingW idem, mais j'ai

essayé les 2 et je n'ai pas réussi à compiler correctement mon app, qui
utilise la librairie SWT pour "héberger" un contrôle ActiveX :-/

Maintenant je ne suis pas un spécialiste windows, donc avis aux
amateurs :)

Je continue mes investigations ...


ok tiens nous au courant
Wep :)


@+
O.L.

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


Avatar
cho7
Il pèse 1.4 Mo ...
J'ai fait un dump complet de sa structure :
http://olivier.ligny.free.fr/rt-list.zip (html zippé).


Effectivement, depuis il y a eu pas mal de changement depuis l'avènement
de Java 2... Pour commencer il y a eu swing :)

Ensuite il manque clairement 20 millions de classes dans ce rt.jar, donc
cette version light de jre ne conviendrait très probablement pas dans
95% des cas pour un programme moderne ecrit avec java 2, 100% dès lors
que swing serait utilisé pour la gui

Bref, bonne chance pour la suite
--
cho7
"Plus grosse est la pomme, plus gros est le ver" - cho7, 2005

Avatar
O.L.
Il pèse 1.4 Mo ...
J'ai fait un dump complet de sa structure :
http://olivier.ligny.free.fr/rt-list.zip (html zippé).


Effectivement, depuis il y a eu pas mal de changement depuis l'avènement
de Java 2... Pour commencer il y a eu swing :)

Ensuite il manque clairement 20 millions de classes dans ce rt.jar, donc
cette version light de jre ne conviendrait très probablement pas dans
95% des cas pour un programme moderne ecrit avec java 2, 100% dès lors
que swing serait utilisé pour la gui

Bref, bonne chance pour la suite


Merci :)

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


Avatar
GG²
"cho7" a écrit dans le message de news:

Qu'en est il vraiment ? Car il me semble pourtant avoir déjà vu des
logiciels programmés en Java donnés sous forme d'un unique exécutable


En fait ils sont programmés en java oui, mais pas totalement

Réponse un peu plus poussée, avec même un peu d'hors sujet pour la
culture g :

La technique des ces fameux stand-alone est simple : ils embarquent une
jvm à bord (ce n'est donc pas du natif à proprement parler)

<...QUIK ...>

Voilà, en esperant t'avoir un peu éclairer
--
cho7
"Plus grosse est la pomme, plus gros est le ver" - cho7, 2005


Bonjour,

Tu as raison, bcp de programmes ne sont que des launchers.
Mais, il y a des exceptions comme le soft Excelsior JET qui est un véritable
compilateur de classes Java en code natif.
http://www.excelsior-usa.com/jet.html
Franchement, à essayer ! Malheureusement payant... au bout de 30 jours.

@+

Avatar
Christophe Tela
O.L. wrote:

Il pèse 1.4 Mo ...
J'ai fait un dump complet de sa structure :
http://olivier.ligny.free.fr/rt-list.zip (html zippé).


Effectivement, depuis il y a eu pas mal de changement depuis l'avènement
de Java 2... Pour commencer il y a eu swing :)

Ensuite il manque clairement 20 millions de classes dans ce rt.jar, donc
cette version light de jre ne conviendrait très probablement pas dans
95% des cas pour un programme moderne ecrit avec java 2, 100% dès lors
que swing serait utilisé pour la gui

Bref, bonne chance pour la suite


Merci :)

A part ça, il existe dans le commerce des produits propriétaires permettant

de faire des EXE à partir de classes Java. Evidemment, si c'est pour faire
un programme OpenSource distribué gratuitement, ça va pas le faire...

Une ch'tite recherche dans google m'a ramené ça :
http://www.excelsior-usa.com/landing/jet-nc.html

Christophe



Avatar
ludo06
Christophe Tela wrote:
O.L. wrote:




Il pèse 1.4 Mo ...
J'ai fait un dump complet de sa structure :
http://olivier.ligny.free.fr/rt-list.zip (html zippé).


Effectivement, depuis il y a eu pas mal de changement depuis l'avènement
de Java 2... Pour commencer il y a eu swing :)

Ensuite il manque clairement 20 millions de classes dans ce rt.jar, donc
cette version light de jre ne conviendrait très probablement pas dans
95% des cas pour un programme moderne ecrit avec java 2, 100% dès lors
que swing serait utilisé pour la gui

Bref, bonne chance pour la suite


Merci :)



A part ça, il existe dans le commerce des produits propriétaires permettant
de faire des EXE à partir de classes Java. Evidemment, si c'est pour faire
un programme OpenSource distribué gratuitement, ça va pas le faire...

Une ch'tite recherche dans google m'a ramené ça :
http://www.excelsior-usa.com/landing/jet-nc.html

Christophe
Peut etre comme l'a suggere un autre lecteur que tu peux utiliser GCJ

(mais je ne sais pas si ca existe ni ca tourne bien sous Win32, une
premiere recherche sur google renvoit
http://www.thisiscool.com/gcc_mingw.htm par exemple ("Here, you can
download a Win32 (MingW) build of GCC, which can compile C, C++ and Java
code into native Windows executables!").

Un exemple de compilation de Eclipse nativement sous linux, portable,
est decrit a
http://developer.classpath.org/mediation/ClasspathShowcase#head-8d4715928aa9e6c25566e788533fc73180b4180e

Qui fait ca:

#!/bin/sh

gcj-dbtool -n eclipse.db

for JAR_FILE in `find -iname "*.jar"`
do
echo "Compiling ${JAR_FILE} to native"
gcj -shared -findirect-dispatch -Wl,-Bsymbolic -fjni -fPIC -o
${JAR_FILE}.so ${JAR_FILE}
gcj-dbtool -a eclipse.db ${JAR_FILE} ${JAR_FILE}.so
done


--
Cordialement,
Ludo - http://www.ubik-products.com
---
"L'amour pour principe et l'ordre pour base; le progres pour but" (A.Comte)




1 2