Différences entre versions de « Java »
imported>SylvainBeucler m |
imported>SylvainBeucler m (plugin web) |
||
Ligne 91 : | Ligne 91 : | ||
On peut sans doute déjà faire des choses avec la version 1.4. | On peut sans doute déjà faire des choses avec la version 1.4. | ||
+ | |||
+ | === Le plugin web === | ||
+ | |||
+ | Essayé sous Lenny après avoir comilé IcedTea: | ||
+ | ln -s `pwd`/openjdk/control/build/linux-i586/j2re-image/lib/i386/gcjwebplugin.so ~/.mozilla/plugins/ | ||
+ | Redémarrez Firefox (ou Mozilla, Iceweasel, etc.) - c'est tout :) | ||
=== Depuis Debian === | === Depuis Debian === |
Version du 16 janvier 2008 à 23:15
Sun a libéré le code source de Java, une technologie utilisée par de nombreux programmes (libres ou non). C'est l'OpenJDK.
Cependant il reste encore des parties propriétaires (binary plugs), mais des projets pour un Java 100% libre existent.
État courant
Les distributions d'aujourd'hui (octobre 2007) proposent maintenant en standard la suite Java libre GIJ+GCJ+Classpath (http://www.gnu.org/software/classpath/), qui n'inclut pas de code de l'OpenJDK. Dans Debian:
- java-gcj-compat: un remplacement pour le JDK de Sun.
- java-gcj-compat-plugin: un plugin pour Mozilla
Ça ne marche pas parfaitement.
IcedTea
IcedTea est un projet qui combine l'OpenJDK avec GCJ+Classpath pour obtenir un JDK 100% libre.
Il n'est pas encore présent dans les distributions. Il est également fortement lié à RedHat, donc le travail est plutôt disponible autour de Fedora (apparemment il y a des paquets binaires disponibles dans Fedora 8, en cours de développement).
Pour compiler IcedTea, il faut IcedTea (cf. [1], b21 est le nom de la version de septembre de l'OpenJDK). Comment on fait alors?
- Soit on peut utiliser les paquets Fedora de développement; mais apparemment cela met à jour pas mal de composants de Fedora 7, qu'on aurait préféré laisser en l'état.
- Soit on compile un version de IcedTea antérieure à fin septembre 2007 (la 1.4-f236... par exemple), puis on compile la dernière version d'IcedTea.
On va décrire ici la deuxième méthode plus en détail.
Compilation de IcedTea 1.4
La page des dépendences propose de rapatrier une longue liste de dépendances depuis le dépôt "développement" (yum --enablerepo=development
). Sur Fedora 7, on va se contenter de les installer depuis le dépôt par défaut (mettre à jour le système avant, j'ai eu une erreur de dépendances Unresolveable requirement gecko-libs = 1.8.1.5 for yelp
).
yum install /usr/bin/ecj cups-devel lesstif-devel libXp-devel libXtst-devel libXi-devel \ xalan-j2 xerces-j2 libXt-devel libgcj freetype-devel gcc gcc-c++ wget java-1.5.0-gcj-devel \ alsa-lib-devel firefox-devel glib2-devel gtk2-devel ant libXinerama-devel
Ensuite, ben on compile bêtement. Notez que vous devez avoir accès à Internet: l'archive IcedTea est de petite taille, mais récupère une version de l'OpenJDK chez Sun durant la compilation, d'environ 90Mo comprimés.
cd /usr/src/ wget http://icedtea.classpath.org/download/source/icedtea-1.4-f23640f520cf248e08d731f91fed62ed14e97b2f.tar.gz tar xzf icedtea-1.4-f23640f520cf248e08d731f91fed62ed14e97b2f.tar.gz cd icedtea-1.4 ./configure make
Là j'ai attendu 6h, mais ça devrait aller plus vite sur des PCs plus récents. Compter tout de même un paire d'heures au minimum. Ça prend aussi 3,7Go d'espace disque. Mais le résultat est là:
IcedTea is served: openjdk/control/build/linux-i586
Compilation de IcedTea dernière version
On compile maintenant le nouveau IcedTea à l'aide du précédent:
cd /usr/src/ hg clone http://icedtea.classpath.org/hg/icedtea cd icedtea ./configure --with-icedtea-home=/usr/src/icedtea-1.4/openjdk/control/build/linux-i586 make
Là j'ai des erreurs bizarres. D'abord deux avertissements, peut-être pas anodins:
WARNING: The version of ant being used is older than the required version of '1.6'. The version of ant found was . WARNING: The version of findbugs being used is older than the required version of '1.1'. The version of findbugs found was . Sanity check passed.
Puis surtout:
BUILD FAILED /usr/src/icedtea/openjdk/langtools/make/build.xml:315: The following error occurred while executing this line: /usr/src/icedtea/openjdk/langtools/make/build.xml:657: bootstrap java is not installed in /usr/src/icedtea/bootstrap/jdk1.6.0
Curieux...
On réessaie plus tard avec la release du 12 octobre, ça passe mieux, mais au bout d'une heure et demi:
make[5]: Leaving directory `/usr/src/icedtea-1.4/openjdk/control/build/linux-i586/hotspot/outputdir/linux_i486_compiler2/product' cd linux_i486_compiler2/product && ./test_gamma There was an error trying to initialize the HPI library. Could not create the Java virtual machine.
Une rapide recherche montre qu'il s'agit d'une "vraie" erreur Java, autrement dit une insulte d'OpenJDK en personne (et non pas de GCJ ou autre). Apparemment cela peut arriver quand 2 JDKs sont en conflicts, ce qui est probablement le cas ici. Je n'ai pas le début d'une piste de correction donc ça va probablement rester comme ça jusqu'à la prochaine release...
La suite...
Maintenant il faudrait voir dans quelle mesure on ne pourrait pas faire une archive binaire directement installable.
À voir aussi: activer le plugin Java dans Mozilla, et d'autres navigateurs si possible.
On peut sans doute déjà faire des choses avec la version 1.4.
Le plugin web
Essayé sous Lenny après avoir comilé IcedTea:
ln -s `pwd`/openjdk/control/build/linux-i586/j2re-image/lib/i386/gcjwebplugin.so ~/.mozilla/plugins/
Redémarrez Firefox (ou Mozilla, Iceweasel, etc.) - c'est tout :)
Depuis Debian
Allez, on tente depuis une Etch.
- cups-devel => libcupsys2-dev
- libXt-devel => libxt-dev
- libXp-devel => libxp-dev
- lesstif-devel => lesstif2-dev
- alsa-lib-devel => libasound2-dev
- libXtst-devel => libxtst-dev
- plugin support headers and libraries => iceape-dev
- gtk+-2.0 gthread-2.0 => libgtk2.0-dev
- gdk-pixbuf-2.0 => libgdk-pixbuf-dev (optional?)
Pour 1.4 < 10-2007:
- ecj => ecj-bootstrap-gcj
- javah => java-gcj-compat-dev
- LIBGCJ jar / libgcj-4.1.2.jar => pas dans Etch! (on a la 4.1.1 :'( ). Le paquet source correspondant est essentiellement GCC - il faut carrement mettre à jour GCC. La page BuildRequirements de IcedTea parle de la "Red Hat branch (with generics)" mais je parviens pas à mettre la main sur le dépôt correspondant. Je suppose qu'il s'agit de compiler GCC après avoir importé la branche de Classpath (cf. libjava/HACKING) qui utilise les "generics", un nouvel élément de syntaxe Java introduit dans la version 1.5 (en quoi cette version est-elle nécessaire?). Et avec
--with-libgcj-jar=/usr/share/java/libgcj-4.1.jar
? Ça donne:
ERROR: Your BOOTDIR environment variable does not point to a valid JDK for bootstrapping this build. A JDK 7 build must be bootstrapped using JDK 1.5.0 fcs (or later). Apparently, your bootstrap JDK is version 1.4 Please update your ALT_BOOTDIR setting and start your build again.
Essayer alors de récupérer un libgcj-4.2.jar sans backporter tout GCC:
cd /tmp mkdir t && cd t wget http://ftp.fr.debian.org/debian/pool/main/g/gcj-4.2/libgcj8-jar_4.2.1-5_all.deb ar x libgcj8-jar_4.2.1-5_all.deb tar xzf data.tar.gz cp usr/share/java/libgcj-4.2.jar /usr/share/java/
Même résultat. En fait c'est plutôt le répertoire d'amorçage bootstrap/ecj/ qui fait référence aux outils Java installés sur le système, "1.4.2" sous Etch (gij 4.1.2) et "1.5.0" sous Lenny (gij 4.2.1). Pas d'amélioration avec --with-ecj
, c'est apparemment l'environnement d'exécution (pas le compilateur) qui est en cause. Je sens qu'on ne va pas couper à un ch'tit rétroportage de GCC... Ou alors tenter une compilation avec apbuild (autopackage) depuis Lenny.
Pour 1.4 >= 10-2007:
- un OpenJDK existant
On y va, on commence par icedtea-1.4-f2364...:
aptitude install ecj-bootstrap-gcj java-gcj-compat-dev aptitude install libcupsys2-dev libxt-dev libxp-dev lesstif2-dev libasound2-dev libxtst-dev iceape-dev libgtk2.0-dev ./configure --with-libgcj-jar=/usr/share/java/libgcj-4.2.jar make
Résultat des courses: au bout d'une petit heure j'ai:
cc1plus: warnings being treated as errors
suivi d'une série d'avertissements identiques:
/mnt/h/icedtea/icedtea-1.4/openjdk-ecj/hotspot/src/os/linux/vm/jvm_linux.cpp:182: warning: deprecated conversion from string constant to 'char*'
et arrêt de la compilation. QUI EST LE FOUTU CRÉTIN QUI A DEMANDÉ DE TRAITER LES AVERTISSEMENTS COMME DES ERREURS, NOM DE NOM??
sed -i -e 's/WARNINGS_ARE_ERRORS = .*/WARNINGS_ARE_ERRORS = /' \ ./openjdk/hotspot/build/linux/makefiles/gcc.make \ ./openjdk-ecj/hotspot/build/linux/makefiles/gcc.make make
et enfin:
IcedTea is served: openjdk/control/build/linux-i586
Prochaine étape: la release d'octobre. On va voir si elle compile mieux que sous Fedora :)
Apparté - recompiler GCC 4.2.2
aptitude install bison wget ftp://ftp.irisa.fr/pub/mirrors/gcc.gnu.org/gcc/releases/gcc-4.2.2/gcc-4.2.2.tar.bz2 tar xjf gcc-4.2.2.tar.bz2 cd gcc-4.2.2 ./configure --prefix=/opt/gcc-4.2.2 make make install
Résultat (au bout de 2-3h):
# /opt/gcc-4.2.2/bin/gij -version java version "1.4.2" gij (GNU libgcj) version 4.2.2
Il nous fallait du 1.5
, c'est raté. C'est donc là que la dépendence GNU libgcj 4.1.2 - Red Hat branch (with generics) intervient...