package javax vs java

385

Quelle est la raison d'être du package javax? Qu'est-ce qui se passe en java et en javax?

Je sais que de nombreux packages d'entreprise sont en javax, tout comme Swing, le nouvel API de date et d'heure (JSR-310) et d'autres packages J2SE.

Jaka Jančar
la source
3
JSR 310 en java.timemaintenant download.java.net/jdk8/docs/api/java/time/package-summary.html
Andrii Nemchenko
Un package optionnel est une implémentation d'une API standard ouverte (exemples de packages optionnels JavaServlet, Java3D). La plupart des packages facultatifs sont enracinés dans l' javax.*espace de noms, bien qu'il puisse y avoir des exceptions.
Lucky

Réponses:

212

Je pense que c'est une chose historique - si un package est introduit comme un ajout à un JRE existant, il se présente sous la forme javax. Si elle est introduite pour la première fois dans le cadre d'un JRE (comme NIO l'était, je crois), elle se présente sous la forme java. Je ne sais pas pourquoi la nouvelle API de date et d'heure finira par javaxsuivre cette logique ... à moins qu'elle ne soit également disponible séparément en tant que bibliothèque pour fonctionner avec les versions antérieures (ce qui serait utile). Remarque de nombreuses années plus tard: après tout, il a finalement été javautilisé.

Je crois qu'il y a des restrictions sur le javapaquet - je pense que les chargeurs de classe sont configurés pour autoriser uniquementjava.* le chargement des classes à l'intérieur rt.jarou quelque chose de similaire. (Il y a certainement un enregistrement ClassLoader.preDefineClass.)

EDIT: Bien qu'une explication officielle (la recherche orbfish suggérée n'en a pas donné une dans la première page) ne fait aucun doute sur "noyau" vs "extension", je soupçonne toujours que dans de nombreux cas, la décision pour un paquet particulier a un raison historique derrière cela aussi. Est-ce java.beansvraiment ce «noyau» de Java, par exemple?

Jon Skeet
la source
7
Parce qu'il est plus facile pour un lecteur d'appuyer sur alt-t et de le taper que pour moi de couper et coller à l'aide de l'iPad? ;). Vous avez raison, cependant, je pense que je voulais dire download.oracle.com/javase/tutorial/ext/index.html . Aucune infraction BTW Je trouve habituellement vos réponses utiles, je suis juste surpris que celle-ci ait été acceptée.
orbfish
1
Le terme "javax" n'apparaît nulle part dans le lien suggéré plus haut dans ce fil de commentaire.
brochure du
La nouvelle API de date et d'heure se terminera en fait comme java.timeaprès tout.
Michael Piefel
234

Initialement, il javaxétait destiné aux extensions, et parfois les choses étaient promues hors de javaxJava.

Un problème était Netscape (et probablement IE) limitant les classes qui pourraient être dans le package java.

Lorsque Swing a été appelé à " passer son diplôme" à javapartir de javaxlà, il y a eu une sorte de mini-explosion parce que les gens ont réalisé qu'ils devraient modifier toutes leurs importations. Étant donné que la compatibilité descendante est l'un des principaux objectifs de Java, ils ont changé d'avis.

À ce moment-là, au moins pour la communauté (peut-être pas pour Sun), tout le point javaxétait perdu. Alors maintenant, nous avons certaines choses dans javax qui devraient probablement être dans java... mais à part les personnes qui ont choisi les noms de paquets, je ne sais pas si quelqu'un peut comprendre la raison d'être au cas par cas.

TofuBeer
la source
12
"Lorsque Swing a été mis au" java "de javax, il y a eu une sorte de mini-explosion parce que les gens ont réalisé qu'ils devraient ensuite modifier toutes leurs importations." Les gens se plaignaient de quelque chose qui pourrait être accompli avec une regex résultant de l'utilisation d'un code de qualité pré-production?
Traîneau
10
Ouaip. J'ai écrit un outil dans Visual Cafe pour convertir entre les deux (javax et java) avant que Sun ne décide de le conserver dans le package javax.
TofuBeer
51

javales packages sont de base et les javaxpackages sont des extensions.

Swing était une extension car AWT était l'API d'interface utilisateur d'origine. Swing est venu ensuite, dans la version 1.1.

duffymo
la source
Swing ne faisait pas partie de 1.1. Il y avait une version de Swing qui fonctionnait sur 1.1 en tant que bibliothèque.
Tom Hawtin - tackline
Il y a la clé - "bibliothèque", ne fait pas partie du JDK. La version est-elle incorrecte? Mes javadocs suggèrent que JButton existe depuis la version 1.3, donc peut-être que ma mémoire m'a fait défaut.
duffymo
1
Alors pourquoi la nouvelle API de date et d'heure dans javax .. la date et l'heure ne sont pas "de base"?
Pacerier
1
"... la nouvelle date et heure api (JSR-310) ..." - quelqu'un chez Oracle / Sun a décidé qu'il valait mieux la mettre en javax, car c'est une extension plus récente des bibliothèques de base. Si vous n'êtes pas d'accord, mieux vaut en parler avec eux.
duffymo
Juste pour référence: ils sont revenus sur cette décision, et JSR-310 a été placé sous java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel
37

L'espace de noms javax est généralement (c'est un mot chargé) utilisé pour les extensions standard, actuellement connues sous le nom de packages optionnels . Les extensions standard sont un sous-ensemble des API non essentielles; l'autre segment des API non principales s'appelle évidemment les extensions non standard, occupant les espaces de noms comme com.sun. * ou com.ibm. . Les API principales prennent en charge la java. espace de noms.

Tout dans le monde de l'API Java ne commence pas par le cœur, c'est pourquoi les extensions sont généralement nées de demandes JSR. Ils sont finalement promus à la base sur la base de «sages conseils».

L'intérêt pour cette nomenclature est né d'un faux pas de la part de Sun - les extensions auraient pu être promues au cœur, c'est-à-dire déplacées de javax. * Vers java. * Rompant la promesse de compatibilité descendante. Les programmeurs ont pleuré enroué et le meilleur sens a prévalu. C'est pourquoi, l'API Swing, bien que faisant partie du noyau, continue de rester dans l'espace de noms javax. *. Et c'est également ainsi que les packages sont promus des extensions au noyau - ils sont simplement disponibles pour téléchargement dans le cadre du JDK et du JRE.

Vineet Reynolds
la source
2

Javax n'était utilisé que pour les extensions. Plus tard, le soleil l'a ajouté à la bibliothèque java en oubliant de supprimer le x. Les développeurs ont commencé à créer du code avec javax. Plus tard dans le temps, Suns a décidé de le changer en Java. Les développeurs n'ont pas aimé l'idée parce que leur code serait ruiné ... donc javax a été conservé.

Miroslav
la source
1

Les packages java. * sont les principaux packages du langage Java, ce qui signifie que les programmeurs utilisant le langage Java devaient les utiliser afin de faire un usage utile du langage Java.

Les packages javax. * sont des packages facultatifs, qui fournissent un moyen standard et évolutif de rendre les API personnalisées disponibles pour toutes les applications exécutées sur la plate-forme Java.

Lakshmi Prasanna
la source
0

Certains packages comme javax.swingn'étaient pas inclus dans la bibliothèque standard java au début. La société Sun a décidé de les considérer comme officiels et de les inclure dans les premières versions de java en tant que bibliothèques standard ou extensions standard.

Par convention, toutes les extensions standard commencent avec un Xcertain temps, elles peuvent être promues en première classe au fil du temps, comme ce qui s'est passé javax.swing.

m.r226
la source