Salut,
Sauf pour des tests rapide, je te déconseille le "package vide"... ca finira par t'emmerder !
Le plus simple serait d'organiser ton projet de la manière suivant :
- src/ qui contiendra l'arborescence du code source.
Donc si tu as un package "pong" qui contient une classe Pong, elle devra se trouver dans src/pong/Pong.java. - res/ qui contiendra les ressources (fichiers, images, ...) qui devront être intégré dans le jar (et donc tu accèdes via getResource()).
- lib/ qui contiendra la liste des librairies externes utilisés par ton projet.
- bin/ qui recevra l'arborescence des *.class compilé.
Il faut bien faire attention à bien position les classes sous la bonne arborescence.
Ensuite, pour compiler il faut préciser :
- Le sourcepath, qui correspond au répertoire de base des sources (src).
Cela permettra au compilateur de trouver le code source de classe lié à compiler.
- Le classpath, qui correspond à l'emplacement des classes déjà compilé (bin), ainsi que les librairies externes (lib/*).
Cela permettra au compilateur de charger ces objets depuis ses emplacements...
- Le répertoire de base de la compilation, c'est à dire l'emplacement où le compilateur mettra ses codes sources.
- Et enfin, ce n'est pas une obligation mais c'est toujours mieux, je recommande de spécifier l'encodage des fichiers sources (sinon c'est l'encodage par défaut du système qui est utilisé, et ca peut faire chier).
Le tout suivi du nom du fichier source.
Du coup, en te placant à la racine de ton projet, tu dois utiliser le code suivant :
javac -sourcepath src -classpath lib/*;bin -d bin -encoding utf-8 src/pong/Pong.java
Attention c'est une exemple "Windows" il y a quelques subtilitées, sous Linux/Unix il faut utiliser les ":" pour séparer les chemins, et protéger le "*" qui peut être interpréter par le shell :
javac -sourcepath src -classpath "lib/*:bin" -d bin -encoding utf-8 src/pong/Pong.java
Tu peux également sauvegarder ces options dans un fichier :
1 2 3 4
| -sourcepath src
-classpath "lib/*:bin"
-d bin
-encoding utf-8 |
Si tu sauvegardes ceci dans un fichier nommé "javac.conf", tu pourras alors compilé en utilisant la commande suivante :
javac @javac.conf src/pong/Pong.java
Enfin, pour exécuter le code il suffit de spécifier le classpath suivi du nom de la classe (au sens Java - pas le nom du fichier).
La principale différence vient que tu dois mettre le répertoire res dans les ressource (afin de trouver ces éléments via getResource()) :
java -classpath lib/*;bin;res pong.Pong
J'ai utilisé des chemins relatifs, mais tu peux bien sûr utiliser des chemins complets. Il faut juste passer les bons chemins
Maintenant sur un projet un tant soit peu volumineux, je conseillerais quand même de s'orienter vers un script ant ou autre...
a++
Partager