Toujours des problèmes avec les bibliothèques java


Je n'ai jamais vraiment compris les bibliothèques java et j'aimerais que quelqu'un puisse clarifier ma compréhension:

  1. Quand j'ai besoin d'un paquet, qui ne vient pas par défaut avec java, alors je le google et télécharge les binaires. c'est-à-dire "HttpClient" puis je télécharge httpcomponents-client-4.2.2-bin.zip à partir de apache.org
  2. Je dois d'abord importer le .compressez le fichier dans netbeans, puis utilisez la commande import (qui est normalement automatiquement suggérée).

J'en ai encore questions/problèmes.

La classe HttpClient semble faire partie de la bibliothèque cliente apache, mais on me dit de import sun.net.www.http.HttpClient pourquoi? (même si je le fais, cela ne résout pas le reste des problèmes)

Puis essayer d'utiliser HttpClient httpclient = new DefaultHttpClient(); dit que le symbole DefaultHttpClient ne peut pas être trouvé, mais la bibliothèque a déjà été ajoutée à Netbeans.

En regardant cet exemple similaire http://www.vogella.com/articles/ApacheHttpClient/article.html certaines des importations ne viennent pas avec le paquet que j'ai téléchargé.

Cela m'arrive assez souvent, et parfois je parviens à le réparer sans vraiment comprendre. Atm J'essaie d'implémenter cette réponse https://stackoverflow.com/a/3325065/960086

Author: Community, 2013-01-04

1 answers

OK, il y a quelques choses que vous devez comprendre en ce qui concerne la façon dont la JVM est capable de créer des instances de classes et je vais commencer en bas.

Lorsqu'une JVM démarre, elle doit charger les classes qui seront utilisées pour exécuter l'application. Pour ce faire, il y a 3 chargeurs de classe en jeu - le chargeur de classe bootstrap, le chargeur de classe extensions et le chargeur de classe système. Les 2 premiers chargent des classes à partir de fichiers jar dans $JAVA_HOME/lib et respectively JAVA_HOME/lib/ext respectivement. Ils sont fondamentalement, ce qui est nécessaire pour faire fonctionner la JVM - ne vous inquiétez pas pour l'instant. Le troisième chargeur de classe, le chargeur de classe système, est ce qui vous intéresse. C'est ce chargeur de classe système qui utilise le classpath pour trouver les classes que vous ajoutez à la JVM pour former votre application.

Il y a beaucoup plus aux chargeurs de classe, mais cela fera l'affaire pour l'instant.

Le chargeur de classes système utilise donc le classpath pour charger les classes. Dans sa forme la plus simple de la classpath n'est rien de plus qu'une référence au répertoire dans lequel le compilateur Java a sorti les classes qu'il a créées. Dans ce répertoire, vous trouverez une hiérarchie de répertoires qui représentent la structure de package que vous avez utilisée lorsque vous avez écrit des classes (la déclaration de package en haut de la .fichier java utilisé pour organiser vos classes dans le contexte de votre demande) et l' .fichiers de classe contenant les classes compilées. Quand une classe est nécessaire par la JVM, le système class-loader analyse la structure de répertoire représentant le paquet et charge la classe (ou lance une ClassNotFoundException si elle ne la trouve pas).

Maintenant, l'un des points forts de Java est le nombre de bibliothèques tierces disponibles. Évidemment, le partage de code en copiant des répertoires ne fonctionnera pas et doncJava Archive ouJAR le fichier est utilisé. Un JAR n'est rien de plus qu'un fichier zip avec quelques répertoires standard plus les mêmes répertoires que représente la structure du paquet et le .fichiers de classe que j'ai mentionnés précédemment. Bien sûr, il ramasse de l'extension .jar mais tout outil capable d'ouvrir un fichier zip ouvrira un JAR. Pour utiliser un JAR vous l'ajoutez simplement à votre chemin de classe comme vous le feriez pour un répertoire et comme pour le répertoire, le chargeur de classes système analysera la structure qu'il contient pour charger les classes au besoin.

Cela dit, vous téléchargez rarement juste un JAR lorsque vous décidez d'utiliser un tiers bibliothèque, comme dans votre cas avec HttpClient. Évidemment, il y a plus que des classes dans n'importe quelle bibliothèque tierce et la plupart incluront de la documentation, des exemples et peut-être même le code source. Cependant l'utilisation de la 3ème partie de la bibliothèque, le processus est le même, vous devez extraire l' JAR contenant les classes que vous souhaitez utiliser et l'ajouter JAR votre classpath.

C'est presque l'histoire complète-comme le nombre de bibliothèques tierces utilisées par typical les applications se sont développées ainsi que le problème de la gestion de ces bibliothèques et ainsi Ant avec Ivy et plus récemment Maven est devenu populaire. En plus de leurs capacités de construction, les deux fournissent un moyen de déclarer les bibliothèques tierces dont dépend votre application et de rationaliser le processus de téléchargement de ces bibliothèques et de les ajouter à votre classpath. Mais ce qu'ils font est exactement le même que si vous deviez télécharger des bibliothèques et ajouter manuellement le chemin de classe.

 4
Author: Nick Holt, 2013-01-04 17:20:13