javax.tools көмегімен динамикалық қолданбаларды құру

Новости мира

Java бастапқы кодын құрастыруға арналған стандартты API ретінде Java SE 6 жүйесінде қосылған javax.tools бумасы статикалық қолданбаларды кеңейту үшін динамикалық функционалдылықты қосуға мүмкіндік береді. Бұл мақала буманың негізгі сыныптарына шолу жасайды және оларды файлдардың орнына Java String, StringBuffer немесе CharSequence нысандарынан Java бастапқы кодын құрастыру үшін пайдалану жолын көрсетеді. Содан кейін бұл қасбет пайдаланушыға кез келген жарамды Java сандық өрнегін пайдаланып y = f(x) сандық функциясын көрсетуге мүмкіндік беретін интерактивті графикалық қолданбаны құру үшін пайдаланылады. Ол бастапқы кодты динамикалық құрастырумен байланысты ықтимал қауіпсіздік тәуекелдерін және осы тәуекелдерді азайту жолдарын талқылау арқылы аяқталады.

Java кеңейтімдерін құрастыру және жүктеу арқылы қолданбаларды кеңейту идеясы жаңа емес және бұл функционалдылықты қолдайтын бірнеше шеңберлер бар. Java Enterprise Edition (Java EE) платформасындағы Java Server Pages (JSP) технологиясы Java сыныптарын жасайтын және құрастыратын динамикалық құрылымның белгілі мысалы болып табылады. JSP аудармашысы .jsp файлдарын аралық бастапқы код файлдарын пайдаланып Java сервлеттеріне түрлендіреді, оларды JSP құрастырады және Java EE Java сервлет контейнеріне жүктейді. Компиляция көбінесе Java Development Kit (JDK) орнатылуын талап ететін javac компиляторына тікелей қоңырау шалу арқылы немесе Sun’s tools.jar JAR ішінде табылған com.sun.tools.javac.Main класына қоңырау шалу арқылы орындалады. Sun лицензиясы tools.jar файлын Java Runtime Environment (JRE) толық нұсқасымен қайта бөлуге мүмкіндік береді. Мұндай динамикалық мүмкіндіктерді іске асырудың басқа жолдары қолданбаның іске асыру тілімен (Ресурстарды қараңыз) біріктіретін динамикалық сценарий тілдерін (мысалы, JavaScript немесе Groovy) пайдалануды немесе пайдаланушы доменге тән тілді және байланысты аудармашыны немесе компиляторды жазуды қамтиды.

Басқа орталар (мысалы, NetBeans және Eclipse) тікелей Java тілінде жазылған кеңейтімдерге мүмкіндік береді, бірақ мұндай жүйелер сыртқы статикалық жинақтауды және Java бастапқы және екілік кодты және оның артефактілерін басқаруды қажет етеді. Apache Commons JCI технологиясы іске қосылған қолданбаға Java сыныптарын құрастыру және жүктеу механизмін қамтамасыз етеді. Janino және Javassist сонымен қатар ұқсас динамикалық мүмкіндіктерді қамтамасыз етеді, дегенмен Janino Java 1.4 нұсқасына дейінгі тіл конструкцияларымен шектелген және Javassist бастапқы код деңгейінде емес, Java класс абстракция деңгейінде жұмыс істейді. Осы жобаларға сілтемелер үшін Ресурстар бөлімін қараңыз. Дегенмен, Java әзірлеушілері Java тілінде жазуға дағдыланғандықтан, Java бастапқы кодын тез арада жасауға, содан кейін құрастыруға және жүктеп алуға мүмкіндік беретін жүйе оқудың ең оңай жолы мен максималды икемділігін уәде етеді.

javax.tools қолданудың артықшылықтары

javax.tools пайдалану келесі артықшылықтарды береді:
Бұл Java SE платформасының мақұлданған кеңейтімі, яғни бұл Java Community Process (JSR 199) шеңберінде әзірленген стандартты API. com.sun.tools.javac.Main API спецификация бойынша құжатталған Java Platform API бөлігі болып табылмайды және басқа жеткізушілерден JDK-де міндетті түрде қолжетімді емес; бұл PI-ның Sun JDK-ның болашақ нұсқаларында қолжетімді болуына кепілдік берілмейді.

Бұл ретте сіз білетіндеріңізді пайдаланасыз: байт код емес, Java бастапқы коды. Дұрыс байт кодының күрделі ережелерін немесе сыныптардың, әдістердің, мәлімдемелердің және өрнектердің жаңа нысан үлгісін үйренбей-ақ, сәйкес Java бастапқы кодын жасау арқылы дұрыс Java сыныптарын жасауға болады.

Ол кодты генерациялауды жеңілдетеді және файлға негізделген бастапқы кодты пайдалануды шектемей, кодты жасау және жүктеп алу үшін қолдау көрсетілетін бір механизмді пайдаланады.

Ол әртүрлі жеткізушілерден JDK 6 және одан жоғары нұсқасының ағымдағы және болашақ енгізулері арасында тасымалданатын.

Ол Java компиляторының дәлелденген нұсқасын пайдаланады.

Түсіндіруге негізделген жүйелерден айырмашылығы, жүктелген сыныптар орындау уақытында JRE орындайтын барлық оңтайландырулардан пайда көре алады.