Java компиляциясы: принциптері және іске асыру

Новости мира

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

Бастапқы кодты құрастыру келесі компоненттерді қажет етеді:
Нысан (айнымалы) класс жолы (сыныптарға жол), оның көмегімен компилятор кітапхана сыныптарын таба алады. Компиляторға арналған сынып жолы нысаны әдетте жүйелік файл каталогтарының реттелген тізімінен және бұрыннан құрастырылған .class файлдарын қамтитын мұрағаттық файлдардан (JAR немесе ZIP) тұрады. Сынып жолы нысаны құрастырылған сыныптары мен бастапқы коды бар JavaFileObject нысандарының жинағын басқаратын JavaFileManager түріндегі нысанмен және JavaFileManager конструкторына жіберілген ClassLoader түріндегі нысан арқылы жүзеге асырылады. JavaFileObject – компиляторға пайдалы JavaFileObject.Kind enum мән опцияларының бірімен мамандандырылған FileObject ұрпағы:
SOURCE (бастапқы код)

CLASS (құрастырылған сынып)
HTML
БАСҚА (басқа)
Әрбір бастапқы файл бастапқы кодқа InputStream түрінің нысаны ретінде қатынасу үшін openInputStream() әдісін қамтамасыз етеді.

javac опциялары (javac компилятор опциялары), олар Iterable түріндегі нысанда жіберіледі

Бастапқы файлдар (бастапқы коды бар файлдар) – құрастыруға арналған бір немесе бірнеше бастапқы .java файлдары. JavaFileManager нысаны бастапқы және нәтиже файлдарының атауларын JavaFileObject нысандарының даналарына байланыстыратын дерексіз файлдық жүйені қамтамасыз етеді. Бұл жағдайда файл бірегей атау мен байт тізбегі арасындағы байланысты білдіреді. Клиентке нақты файлдық жүйені пайдаланудың қажеті жоқ. Мақалада келтірілген мысалдарда JavaFileManager нысаны компиляцияланатын Java бастапқы кодын қамтитын сынып атаулары мен CharSequence нысандары арасындағы байланыстыруды басқарады. JavaFileManager.Location түріндегі нысан файл атауын және бұл бастапқы кодтың орны немесе нәтижесінде құрастырылған кодтың орны екенін көрсететін жалаушаны қамтиды. ForwardingJavaFileManager класы Жауапкершілік тізбегі үлгісін (Ресурстарды қараңыз) жүзеге асырады, ол басқарушыларға сынып жолдары мен бастапқы жолдар JAR файлдары мен каталогтарын біріктіретіндей тізбектелуге мүмкіндік береді. Java класы тізбектің бірінші элементінде табылмаса, іздеу тізбектегі қалған элементтерге беріледі.

Шығару каталогтары (шығыс файлдары бар каталогтар), мұнда компилятор жасалған .class файлдарын жазады. Нәтижедегі .class файлдарының жинағы ретінде әрекет ететін JavaFileManager нысаны құрастырылған CLASS файлдарын көрсететін JavaFileObject нысандарын да сақтайды.

құрастырушы (компилятор). JavaCompiler сыныбы JavaFileManager нысанындағы JavaFileObject SOURCE нысандарынан бастапқы кодты құрастыратын JavaCompiler.CompilationTask нысандарын жасайды, жаңа шығыс JavaFileObject CLASS файлдарын және Diagnostic түріндегі нысандарды (ескертулер мен қателер) жасайды. ToolProvider.getSystemJavaCompiler() статикалық әдіс компилятор данасын қайтарады.

Diagnostic және DiagnosticListener сыныптарымен орындалатын компилятордың ескертулері мен қателері (ескертулер мен қателер бар компилятордан келген хабарламалар). Диагностикалық типті нысан – компилятор шығарған жалғыз компиляция ескертуі немесе қатесі. Диагностикалық объект анықтайды:
KIND (түрі): ERROR (қате), WARNING (ескерту), MANDATORY_WARNING (міндетті ескерту), ЕСКЕРТПЕ (ескерту) немесе OTHER (басқа);
Бастапқы кодтың орналасқан жері (жол мен баған нөмірін қоса);
Хабар.
Клиент компиляторды DiagnosticListener түріндегі нысанмен қамтамасыз етеді, ол арқылы компилятор клиентке диагностикалық хабарларды жібереді. DiagnosticCollector класы DiagnosticListener бағдарламасының қарапайым іске асуы болып табылады.