Y compris les bibliothèques dans le bocal
Ok, voici donc ce que nous avons:
Nous avons deux paquets de bibliothèque, que nous avons compilé dans des bocaux.
paquet de starwars; public class JarJar { public void JarSayHello() { Système.out.println("Jaaaaar!!"); } }
paquet barwars; public class BarBar { public void BarSayHello() { Système.out.println("Baaaaa!!"); } }
Nous compilons ces avec
javac -d bin -sourcepath src src/barwars/BarBar.java jar cvf barwars.jar -C bin .
et
javac -d bin -sourcepath src src/starwars/JarJar.java jar cvf starwars.jar -C bin .
Tous les joliment dans des bocaux pour nous.
Maintenant, nous voulons inclure ces deux bocaux dans un autre projet java.
nous avons donc
- /project/src/a_pack/HelloWorld.java
- /project/libs/starwars.jar
- /project/libs/barwars.jar
- /project/manifest.txt
paquet a_pack; l'importation de starwars.JarJar; importation barwars.BarBar; public class HelloWorld { public static void main(String[] args) { Système.out.println("Hello, World"); JarJar myJar = new JarJar(); myJar.JarSayHello(); BarBar myBar = new BarBar(); myBar.BarSayHello(); } }
Manifest.txt
Principal de la Classe: a_pack.HelloWorld Chemin de classe: libs/starwars.jar libs/barwars.jar
Maintenant, nous le compiler avec:
javac -d bin -sourcepath src -cp "libs/starwars.jar;libs/*" src/a_pack/HelloWorld.java jar cvfm helloworld.jar manifest.txt -C bin .
Et cette compile et fonctionne très bien.
Maintenant, j'ai deux problèmes.
Tout d'abord - si je déplace ce fichier jar à un autre endroit, et essayez de l'exécuter, puis je vais l'obtenir:
Exception in thread "main" java.lang.NoClassDefFoundError: starwars/JarJar
Maintenant je peux résoudre ce problème en déplaçant le dossier libs à l'endroit où j'ai déplacer le bocal. Mais ce qui me frappe comme une malpropre (si il y a déjà un dossier libs dans cet endroit?).
Idéalement ce que je voudrais faire, c'est d'inclure le référencés pots à l'intérieur du pot, donc il y a un pot qui contient tout ce qui est nécessaire pour exécuter à l'intérieur de lui-même.
Est-ce possible? (Et est-il une bonne pratique?)
- Vous pouvez l'examiner comment Maven permet de résoudre ce.
Vous devez vous connecter pour publier un commentaire.
Possible, oui. Bonne pratique no.
Pots sont juste des fichiers zip, de sorte que vous pouvez décompresser et rezip au contenu de votre coeur. Le plus gros problème est la gestion de tous ces bocaux votre projet devient plus grand.
La plupart des projets ne sont pas compiler à l'aide de la ligne de commande. Au lieu de cela, une IDE garde vos pots jusqu'à ce jour. Et le plus moderne des projets Java utiliser Maven ou de Lierre de placer les pots dans un référentiel et des poissons comme nécessaire.
Regarder Eclipse, Netbeans, ou Intellij pour IDEs. Et regardez-la dans Maven pour la structuration de votre projet.
helloworld.jar
et un tas de externe pots delibs/
, qu'écrire dans le terminal pour obtenirhelloworldwithdeps.jar
?