C:.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoftPATH (echo %PATH%).HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoftPATH.But principal : la portabilité
« Write once, run anywhere » (voir l’article Wikipedia)
Très versatile, mais un peu lourd (plateforme, syntaxe et performances)
C:\Program Files\Java\jdk...JDK dans cette présentationJava Platform JDK pour le télécharger).dev tools (désactiver les deux autres, inutiles ici).HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\JavaSoftPATH.tp_java, puis :
G:\tp_java>java.exe
'java.exe' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.java.exe dansC:\Windows\System32. Mauvaise pratique ! Suppression !G:\tp_java>echo %JDK%
%JDK%
G:\tp_java>set JDK="C:\Program Files (x86)\Java\jdk1.7.0_45"
G:\tp_java>echo %JDK%
"C:\Program Files (x86)\Java\jdk1.7.0_45"
G:\tp_java>%JDK%\bin\java.exe
Syntaxe : java [-options] class [args...]
(pour l'exÚcution d'une classe)
ou java [-options] -jar jarfile [args...]
(pour l'exÚcution d'un fichier JAR)
...
tp_java.
class hello {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}hello.class.%JDK%\bin\javac.exe hello.java (attention au c).hello.class.%JDK%\bin\java.exe hello (sans c ni .class).hello.class avec un éditeur adéquat.hello.javaHello World!planque dans %JDK% et y mettre tous les fichiers
qu’il contient.planque sera le seul sous-dossier de %JDK%.%JDK%\bin %JDK%\planque\bin
\jre deviendra \jre
\lib \lib
... ...%JDK% n’interfèrera pas avec notre JDK minimal.tp_java, construire l’arborescence suivante (à coups de mkdir) :
G:\tp_java> tree jdk
Structure du dossier pour le volume...
Le numéro de série du volume est...
G:\TP_JAVA\JDK
+---jdk
+---bin
+---jre
¦ +---bin
¦ ¦ +---client
¦ +---lib
¦ +---i386
+---libG:\tp_java>mkdir jdk
G:\tp_java>mkdir jdk\bin
G:\tp_java>mkdir jdk\jre
G:\tp_java>mkdir jdk\jre\bin
G:\tp_java>mkdir jdk\jre\bin\client
G:\tp_java>mkdir jdk\jre\lib
G:\tp_java>mkdir jdk\jre\lib\i386
G:\tp_java>mkdir jdk\libCopier javac.exe et java.exe dans jdk\bin.
G:\tp_java>copy %JDK%\planque\bin\java.exe jdk\bin
1 fichier(s) copié(s).
G:\tp_java>copy %JDK%\planque\bin\javac.exe jdk\bin
1 fichier(s) copié(s).
del hello.class
jdk\bin\javac.exe hello.java.bin/jli.dll, le copier et retenter.
G:\tp_java>copy %JDK%\planque\bin\jli.dll jdk\bin
1 fichier(s) copié(s).
G:\tp_java>jdk\bin\javac.exe hello.java
Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.G:\tp_java>copy %JDK%\planque\jre\bin\java.dll jdk\jre\binjavac a besoin du JRE pour fonctionner :jre\lib\i386\jvm.cfgError: could not open 'G:\tp_java\jdk\jre\lib\i386\jvm.cfg'jre\bin\client\jvm.dllError: missing 'client' JVM at 'G:\tp_java\jdk\jre\bin\client\jvm.dll'.Please install or use the JRE or JDK that contains these missing components.JRE.jre\bin\verify.dllError occurred during initialization of VMUnable to load native library: Can't find dependent librariesjre\bin\zip.dllError occurred during initialization of VMUnable to load ZIP library: G:\tp_java\jdk\jre\bin\zip.dllPlus difficile…
`Error occurred during initialization of VM`
`java/lang/NoClassDefFoundError: java/lang/Object`
jre\lib\rt.jar qui nous manque.rt pour runtime, contient par exemple :java.lang.String, java.io, …lib, comme library, bibliothèque,%JDK%\src ou %JDK%\src.zip…classes.jar..jar est l’extension des Java ARchivesunzip,.jar en .zip,.zip en .jar.jar.%JDK%\planque\bin\jar.exe dans jdk\bin.META-INF, contenant le fichier MANIFEST.MF.Autres types similaires :
.war (Web Application aRchive),.ear (Enterprise ARchive),.jar avec des composants Entreprise,.rar (Resource Adapter aRchive),Dernière difficulté :
Erreur : impossible de trouver ou charger la classe principale
com.sun.tools.javac.Main
lib\tools.jar.META-INF déclare des services, le manifeste est quasi vide.Remarque : pour un JDK vraiment minimal,
* on pourrait s’amuser à enlever des classes de rt.jar et tools.jar.
hello en ello et compiler.ello.class..java contient deux classes,.class..java.javac a deux options importantes :-d : indique le répertoire où les .class seront écrits-cp : indique le répertoire où les bibliothèques nécessaires à la
compilation sont cherchéestp_java.TestCompteur.java. Que se passe-t-il ?Compteur.java a aussi été compilée.cp.planque) le fichier
Compteur.java et supprimer Compteur.class.java.lang.NoClassDefFoundError.java.exe -cp .;planque TestCompteur.. pour le répertoire courant,; est un séparateur (attention, si ; est votre séparateur
d’instructions, il faut peut-être utiliser :),planque permet d’atteindre la classe Compteur.. du classpath ?, et si
on supprime planque ?d.planque en out. Ce répertoire va stocker les .class.javac.exe -d out TestCompteur.javaCompteur.java compilé aussi.TODO: packages et chemins
.jar.mon_jarMETA-INFManifest.MF, avec le texte Manifest-Version: 1.0Compteur.classMETA-INF et Compteur.class pour créer un .zip..jar..class.java.exe -cp Compteur.jar TestCompteur..jar dans la nature (TTS) et l’utiliser.Manifest-Version: 1.0
Main-Class: TestCompteur