Javax vs Java-Paket

385

Was ist der Grund für das Javax-Paket? Was geht in Java und was in Javax?

Ich weiß, dass viele Enterprise-Pakete in Javax enthalten sind, aber auch Swing, die neue Datums- und Uhrzeit-API (JSR-310) und andere J2SE-Pakete.

Jaka Jančar
quelle
3
JSR 310 in java.timejetzt download.java.net/jdk8/docs/api/java/time/package-summary.html
Andrii Nemchenko
Ein optionales Paket ist eine Implementierung eines offenen, Standard - API (Beispiele für optionale Pakete JavaServlet, Java3D). Die meisten optionalen Pakete sind im javax.*Namespace verwurzelt , obwohl es Ausnahmen geben kann.
Glücklicher

Antworten:

212

Ich denke, es ist eine historische Sache - wenn ein Paket als Ergänzung zu einer bestehenden JRE eingeführt wird, kommt es als javax. Wenn es zuerst als Teil einer JRE eingeführt wird (wie NIO es war, glaube ich), dann kommt es als java. Ich bin mir nicht sicher, warum die neue Datums- und Uhrzeit-API javaxdieser Logik folgt ... es sei denn, sie ist auch separat als Bibliothek verfügbar, um mit früheren Versionen zu arbeiten (was nützlich wäre). Anmerkung von vielen Jahren später: Es endete schließlich doch java.

Ich glaube, es gibt Einschränkungen für das javaPaket - ich denke, Klassenlader sind so eingerichtet, dass nur Klassen java.*darin geladen werden können rt.jaroder ähnliches. (Es gibt sicherlich einen Check-in ClassLoader.preDefineClass.)

BEARBEITEN: Während eine offizielle Erklärung (der vorgeschlagene Such-Orbfish hat auf der ersten Seite oder so keine ergeben) keinen Zweifel an "Kern" oder "Erweiterung" hat, vermute ich immer noch, dass in vielen Fällen die Entscheidung für ein bestimmtes Paket eine hat historischer Grund dahinter auch. Ist das java.beanswirklich "Kern" von Java zum Beispiel?

Jon Skeet
quelle
7
Weil es für einen Leser einfacher ist, Alt-T zu drücken und zu tippen, als für mich, mit dem iPad auszuschneiden und einzufügen? ;). Sie haben jedoch Recht, ich glaube, ich meinte download.oracle.com/javase/tutorial/ext/index.html . Keine Beleidigung Übrigens finde ich Ihre Antworten normalerweise nützlich. Ich bin nur überrascht, dass diese akzeptiert wurde.
Orbfish
1
Der Begriff "javax" erscheint nirgendwo in dem Link, der weiter oben in diesem Kommentarthread vorgeschlagen wurde.
Broschüre
Die neue Datums- und Uhrzeit-API wird tatsächlich wie immer enden java.time.
Michael Piefel
234

Ursprünglich javaxwar es für Erweiterungen gedacht, und manchmal wurden Dinge aus javaxJava heraus gefördert.

Ein Problem war, dass Netscape (und wahrscheinlich IE) Klassen einschränkte, die im Java-Paket enthalten sein könnten.

Als Swing javavon javaxdort aus "graduieren" sollte, gab es eine Art Mini-Explosion, weil die Leute erkannten, dass sie alle ihre Importe modifizieren mussten. Angesichts der Tatsache, dass Abwärtskompatibilität eines der Hauptziele von Java ist, haben sie ihre Meinung geändert.

Zu diesem Zeitpunkt war zumindest für die Gemeinde (vielleicht nicht für Sun) der ganze Punkt javaxverloren. Jetzt haben wir also einige Dinge in Javax, die wahrscheinlich enthalten sein sollten java... aber abgesehen von den Leuten, die die Paketnamen gewählt haben, weiß ich nicht, ob jemand von Fall zu Fall herausfinden kann, was die Gründe sind.

TofuBeer
quelle
12
"Als Swing von Java zu Java" graduieren "wollte, gab es eine Art Mini-Explosion, weil die Leute erkannten, dass sie dann alle ihre Importe modifizieren mussten." Die Leute beschwerten sich über etwas, das mit einem regulären Ausdruck erreicht werden konnte, der darauf zurückzuführen war, dass sie den Qualitätscode für die Vorproduktion verwendeten.
Schlitten
10
Jep. Ich habe in Visual Cafe ein Tool geschrieben, um zwischen den beiden zu konvertieren (Javax und Java), bevor Sun beschlossen hat, es einfach im Javax-Paket zu behalten.
TofuBeer
51

javaPakete sind Basis und javaxPakete sind Erweiterungen.

Swing war eine Erweiterung, da AWT die ursprüngliche UI-API war. Swing kam danach in Version 1.1.

Duffymo
quelle
Swing war nicht Teil von 1.1. Es gab eine Version von Swing, die auf 1.1 als Bibliothek lief.
Tom Hawtin - Tackline
Es gibt den Schlüssel - "Bibliothek", der nicht Teil des JDK ist. Habe ich die falsche Version? Meine Javadocs deuten darauf hin, dass JButton seit 1.3 ist, also hat mich mein Gedächtnis vielleicht gescheitert.
Duffymo
1
Warum ist die neue Datums- und Uhrzeit-API in javax .. Datum und Uhrzeit sind nicht "Basis"?
Pacerier
1
"... die neue Datums- und Uhrzeit-API (JSR-310) ..." - Jemand von Oracle / Sun entschied, dass es besser in Javax eingesetzt werden sollte, da es sich um eine neuere Erweiterung der Kernbibliotheken handelt. Wenn Sie nicht einverstanden sind, nehmen Sie es am besten mit.
Duffymo
Nur als Referenz: Sie haben diese Entscheidung rückgängig gemacht, und JSR-310 wurde unter java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel
37

Der Javax-Namespace wird normalerweise (das ist ein geladenes Wort) für Standarderweiterungen verwendet, die derzeit als optionale Pakete bezeichnet werden . Die Standarderweiterungen sind eine Teilmenge der Nicht-Kern-APIs. Das andere Segment der Nicht-Kern-APIs wird offensichtlich als Nicht-Standard-Erweiterungen bezeichnet und belegt die Namespaces wie com.sun. * oder com.ibm. . Die Kern-APIs belegen Java. Namespace.

Nicht alles in der Java-API-Welt beginnt im Kern, weshalb Erweiterungen normalerweise aus JSR-Anforderungen entstehen. Sie werden schließlich auf der Grundlage von „weisen Ratschlägen“ zum Kern befördert.

Das Interesse an dieser Nomenklatur ergab sich aus einem Fauxpas von Sun - Erweiterungen hätten zum Kern befördert werden können, dh von Javax * zu Java * verschoben, was das Versprechen der Abwärtskompatibilität brach. Programmierer weinten heiser, und es herrschte ein besserer Verstand. Aus diesem Grund verbleibt die Swing-API, obwohl sie Teil des Kerns ist, weiterhin im Namespace javax. *. Auf diese Weise werden Pakete auch von Erweiterungen auf Core umgestellt - sie werden einfach als Teil des JDK und der JRE zum Download bereitgestellt.

Vineet Reynolds
quelle
2

Javax war früher nur für Erweiterungen. Doch später fügte Sun es der Java-Bibliothek hinzu und vergaß, das x zu entfernen. Entwickler haben begonnen, Code mit Javax zu erstellen. Doch später in der Zeit beschlossen die Sonnen, es in Java zu ändern. Den Entwicklern gefiel die Idee nicht, weil ihr Code ruiniert würde ... also wurde Javax beibehalten.

Miroslav
quelle
1

Java. * -Pakete sind die Kernpakete der Java-Sprache, was bedeutet, dass Programmierer, die die Java-Sprache verwenden, diese verwenden mussten, um die Java-Sprache sinnvoll nutzen zu können.

javax. * -Pakete sind optionale Pakete, die eine standardmäßige, skalierbare Möglichkeit bieten, benutzerdefinierte APIs für alle Anwendungen verfügbar zu machen, die auf der Java-Plattform ausgeführt werden.

Lakshmi Prasanna
quelle
0

Einige Pakete wie javax.swingwaren zunächst nicht in der Java-Standardbibliothek enthalten. Sun Company entschied sich, sie als offiziell zu betrachten und nahm sie als Standardbibliotheken oder Standarderweiterungen in die frühen Versionen von Java auf.

Konventionell beginnen alle Standarderweiterungen mit einer XWeile, bis sie im Laufe der Zeit zu erstklassigen Erweiterungen befördert werden können javax.swing.

m.r226
quelle