pakiet javax vs java

385

Jakie jest uzasadnienie pakietu javax? Co wchodzi w javę, a co w javax?

Wiem, że wiele pakietów Enterprise-y jest w javax, ale podobnie jak Swing, nowy interfejs API daty i godziny (JSR-310) i inne pakiety J2SE.

Jaka Jančar
źródło
3
JSR 310 jest java.timeteraz download.java.net/jdk8/docs/api/java/time/package-summary.html
Andrii Nemchenko
Opcjonalny pakiet jest wdrożenie otwartego, standardowego API (przykłady opcjonalnych pakietów JavaServlet, Java3D). Większość opcjonalnych pakietów jest zrootowana w javax.*przestrzeni nazw, chociaż mogą istnieć wyjątki.
Lucky

Odpowiedzi:

212

Myślę, że to rzecz historyczna - jeśli pakiet zostanie wprowadzony jako dodatek do istniejącego środowiska JRE, pojawi się jako javax. Jeśli po raz pierwszy został wprowadzony jako część środowiska JRE (jak sądzę NIO), to pojawia się jako java. Nie jestem pewien, dlaczego nowy interfejs API daty i godziny skończy jako javaxzgodny z tą logiką ... chyba że będzie dostępny osobno jako biblioteka do pracy z wcześniejszymi wersjami (co byłoby przydatne). Zauważ, że wiele lat później: w końcu ostatecznie się pojawiło java.

Wydaje mi się, że istnieją ograniczenia dotyczące javapakietu - myślę, że moduły ładujące klasy są skonfigurowane tak, aby zezwalały tylkojava.* na ładowanie klas wewnątrz rt.jarlub coś podobnego. (Na pewno jest odprawa ClassLoader.preDefineClass.)

EDYCJA: Chociaż oficjalne wyjaśnienie (sugerowane orbfish wyszukiwania nie przyniosło żadnego na pierwszej stronie) nie ma wątpliwości co do „rdzenia” vs. uzasadnienie historyczne. Czy java.beanstak naprawdę na przykład jest to „rdzeń” Javy?

Jon Skeet
źródło
7
Czy czytelnikowi łatwiej jest nacisnąć Alt-T i wpisać go niż wycinać i wklejać za pomocą iPada? ;). Masz rację, myślę, że miałem na myśli download.oracle.com/javase/tutorial/ext/index.html . Bez obrazy BTW Zazwyczaj uważam twoje odpowiedzi za przydatne Jestem zaskoczony, że ta odpowiedź została zaakceptowana.
orbfish,
1
Termin „javax” nie pojawia się nigdzie w linku sugerowanym wcześniej w tym wątku komentarza.
broszura
W końcu nowy interfejs API daty i godziny skończy się tak, java.timejak powinien.
Michael Piefel,
234

Pierwotnie javaxmiał być przeznaczony na rozszerzenia, a czasem rzeczy były promowane z javaxjava.

Jednym z problemów było ograniczenie przez Netscape (i prawdopodobnie IE) klas, które mogą znajdować się w pakiecie java.

Kiedy Swing został ustawiony na „absolwenta”, by javaz javaxnie było coś w rodzaju mini-wysadzić ponieważ ludzie zdali sobie sprawę, że będą musieli zmodyfikować wszystkie ich importu. Biorąc pod uwagę, że kompatybilność wsteczna jest jednym z głównych celów Java, zmienili zdanie.

W tym momencie, przynajmniej dla społeczności (może nie dla Słońca) cały punkt javaxzostał utracony. Więc teraz mamy w javax kilka rzeczy, które prawdopodobnie powinny być java... ale oprócz ludzi, którzy wybrali nazwy pakietów, nie wiem, czy ktokolwiek może dowiedzieć się, jakie są uzasadnienia dla poszczególnych przypadków.

TofuBeer
źródło
12
„Kiedy Swing został„ ukończony ”do java z javax, nastąpiło coś w rodzaju mini-wysadzenia, ponieważ ludzie zdali sobie sprawę, że będą musieli zmodyfikować cały import”. Ludzie narzekali na coś, co można osiągnąć za pomocą wyrażenia regularnego, które było wynikiem użycia przez nich kodu jakości przedprodukcyjnego?
Sled
10
Tak. Napisałem narzędzie w Visual Cafe do konwersji między nimi (javax i java), zanim Sun zdecydował się zachować je w pakiecie javax.
TofuBeer
51

javapakiety są podstawowe , a javaxpakiety są rozszerzeniami.

Swing był rozszerzeniem, ponieważ AWT był oryginalnym interfejsem API interfejsu użytkownika. Swing pojawił się później, w wersji 1.1.

duffymo
źródło
Huśtawka nie była częścią 1.1. Była wersja Swinga, która działała na 1.1 jako biblioteka.
Tom Hawtin - tackline
Jest klucz - „biblioteka”, a nie część JDK. Czy mam błędną wersję? Moi javadocs sugerują, że JButton istnieje od 1.3, więc być może moja pamięć mnie zawiodła.
duffymo,
1
Dlaczego więc nowy interfejs API daty i godziny w javax .. data i godzina nie jest „podstawowy”?
Pacerier
1
„... nowy interfejs API daty i godziny (JSR-310) ...” - ktoś z Oracle / Sun zdecydował, że lepiej umieścić javax, ponieważ jest to nowsza wersja bibliotek podstawowych. Jeśli się nie zgadzasz, najlepiej się z nimi pogodzić.
duffymo
Tylko w celach informacyjnych: cofnęli tę decyzję, a JSR-310 został objęty java.time: docs.oracle.com/javase/8/docs/api/java/time/…
Mark Rotteveel
37

Przestrzeń nazw javax jest zwykle (to załadowane słowo) używana dla standardowych rozszerzeń, obecnie znanych jako pakiety opcjonalne . Standardowe rozszerzenia są podzbiorem nie-podstawowych interfejsów API; drugi segment nie-podstawowych interfejsów API oczywiście nazywał się niestandardowymi rozszerzeniami, zajmując przestrzenie nazw, takie jak com.sun. * lub com.ibm. . Podstawowe interfejsy API zajmują java. przestrzeń nazw.

Nie wszystko w świecie Java API zaczyna się od rdzenia, dlatego rozszerzenia zwykle powstają z żądań JSR. W końcu awansują do rdzenia na podstawie „mądrej rady”.

Zainteresowanie tą nomenklaturą wynikało z faux pas ze strony Sun - rozszerzenia mogły być promowane do rdzenia, tj. Przeniesione z javax. * Do java. *, Przełamując obietnicę wstecznej kompatybilności. Programiści płakali ochryple i zwyciężył lepszy rozsądek. Dlatego API Swing, mimo że jest częścią rdzenia, nadal pozostaje w przestrzeni nazw javax. *. W ten sposób pakiety są promowane od rozszerzeń do rdzenia - są one po prostu udostępniane do pobrania jako część JDK i JRE.

Vineet Reynolds
źródło
2

Javax był kiedyś tylko dla rozszerzeń. Jednak później słońce dodało go do biblioteki Java, zapominając o usunięciu x. Programiści zaczęli tworzyć kod za pomocą javax. Jednak później z czasem słońca postanowiły zmienić go na java. Programiści nie spodobali się temu pomysłowi, ponieważ ich kod zostałby zrujnowany ... więc javax został zachowany.

Miroslav
źródło
1

Pakiety java. * są podstawowymi pakietami językowymi Java, co oznacza, że ​​programiści używający języka Java musieli z nich korzystać, aby móc w pełni korzystać z języka Java.

Pakiety javax. * to pakiety opcjonalne, które zapewniają standardowy, skalowalny sposób udostępniania niestandardowych interfejsów API wszystkim aplikacjom działającym na platformie Java.

Lakshmi Prasanna
źródło
0

Niektóre pakiety, takie jak javax.swing, nie były początkowo zawarte w standardowej bibliotece Java. Firma Sun postanowiła uznać je za oficjalne i zawarła je we wczesnych wersjach Java jako standardowe biblioteki lub standardowe rozszerzenia.

Zgodnie z konwencją wszystkie standardowe rozszerzenia zaczynają się od Xchwili, gdy z czasem mogą stać się pierwszorzędnymi, tak jak to się stało javax.swing.

m.r226
źródło