大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Java編譯器eclipse的主要分析

Java編譯器eclipse的主要分析

更新時間:2021-05-25 15:24:55 來源:動力節(jié)點 瀏覽1041次

Java是一個開放的平臺,對于除發(fā)布編譯器/解釋器/基礎(chǔ)類庫之外,該語言的負責(zé)機構(gòu)更多的是制定一系列標(biāo)準(zhǔn),任何符合標(biāo)準(zhǔn)的廠商產(chǎn)品均可用于市場投放。甚至包括其編譯器及解釋器。

(比如Hibernate提供了JPA實現(xiàn);Tomcat實現(xiàn)了Java EE服務(wù)器標(biāo)準(zhǔn),其Servlet容器通過了Java認證;各數(shù)據(jù)庫或中間件廠商也根據(jù)JDBC接口開發(fā)驅(qū)動。說白了,Java基本就是都提供接口,然后讓廠商開發(fā)實現(xiàn),因此有時候我會罵,邊罵邊編碼!)

GCC有java編譯器,可以看看。

我們主要主要介紹Eclipse自己開發(fā)和使用的針對Java的編譯器:(ecj)the Eclipse Compiler for Java。Eclipse沒有使用JDK自帶的編譯器,而是自己開發(fā)的,ecj也通過了java的驗證。

除了Eclipse之外,Tomcat也用到了Ecj,用于動態(tài)編譯jsp文件。我們安裝Tomcat后可在lib文件夾下找到ecj:

java編譯器eclipse

現(xiàn)在問題來了:怎么取得ecj源碼呢?

別急,我們從tomcat源碼中查看一下:

java編譯器eclipse

java編譯器eclipse

下面是我下載好后倒入項目文件后截圖:

java編譯器eclipse

這個文件報錯,不過可以把他刪除了看,我先沒有刪除,因為這個文件是ecj與ant的橋梁。從源碼可以看出這個JDTCompilerAdapter是繼承自ant的DefaultCompilerAdapter,用于ant的編譯器適配器。個人感覺ecj從代碼(技術(shù))上并沒有耦合任何一個調(diào)用者,這里的ant也只是一個適配器,你刪除或者留著沒有任何影響。Tomcat里也沒有使用ant。

我從這里主要是想看看高層怎么調(diào)用ecj來編譯代碼,我們看看關(guān)鍵代碼:

private static String compilerClass = "org.eclipse.jdt.internal.compiler.batch.Main"; //$NON-NLS-1$

/**
     * Performs a compile using the JDT batch compiler
     * @throws BuildException if anything wrong happen during the compilation
     * @return boolean true if the compilation is ok, false otherwise
     */
    public boolean execute() throws BuildException {
        this.attributes.log(AntAdapterMessages.getString("ant.jdtadapter.info.usingJDTCompiler"), Project.MSG_VERBOSE); //$NON-NLS-1$
        Commandline cmd = setupJavacCommand();

        try {
            Class c = Class.forName(compilerClass);
            Constructor batchCompilerConstructor =
                    c.getConstructor(new Class[] {
                            PrintWriter.class,
                            PrintWriter.class,
                            Boolean.TYPE,
                            Map.class});
            Object batchCompilerInstance =
                    batchCompilerConstructor.newInstance(new Object[] {
                            new PrintWriter(System.out),
                            new PrintWriter(System.err),
                            Boolean.TRUE,
                            this.customDefaultOptions});
            Method compile =
                    c.getMethod("compile", new Class[] {String[].class}); //$NON-NLS-1$
            Object result =
                    compile.invoke(batchCompilerInstance, new Object[] {
                            cmd.getArguments()});
            final boolean resultValue = ((Boolean) result).booleanValue();
            if (!resultValue && this.logFileName != null) {
                this.attributes.log(AntAdapterMessages.getString("ant.jdtadapter.error.compilationFailed", this.logFileName)); //$NON-NLS-1$
            }
            return resultValue;
        } catch (ClassNotFoundException cnfe) {
            throw new BuildException(AntAdapterMessages.getString("ant.jdtadapter.error.cannotFindJDTCompiler")); //$NON-NLS-1$
        } catch (Exception ex) {
            throw new BuildException(ex);
        }
    }

我把代碼換了下行,大家看13和26行,可以看出這里使用了

org.eclipse.jdt.internal.compiler.batch.Main#compile(String[])方法來進行編譯,我們可以稍微看看:

java編譯器eclipse

從源碼上來看1664是配置,1684可能是編譯,不過我們先不細看。

我們再看看Tomcat怎么使用ecj的,我們查看org.apache.jasper.compiler.JDTCompiler源碼(我貼出了源碼,不過有點長):

java編譯器eclipse

從427可以知道,Tomcat使用了org.eclipse.jdt.internal.compiler.Compiler#compile(ICompilationUnit[])

當(dāng)然,在這之前使用了很多代碼來進行配置。

以上就是動力節(jié)點小編介紹的"Java編譯器eclipse的主要分析",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲社区在线 | 涩涩视频观看 | 色青青草原桃花久久综合 | 国产a一级毛片午夜剧场14 | 国内精品久久久久影院亚洲 | 亚洲精品一区二区乱码在线观看 | 久久久久久久蜜桃 | 乱人伦99久久 | 成人嫩草研究院网站进 | 国产一区二区精品久久 | 99精品国产久热在线观看66 | 久久66热这里只会有精品 | 国产精品视频公开费视频 | 久久久久久久国产精品影院 | 成人最新午夜免费视频 | 欧美成人综合在线 | 亚洲一级生活片 | 日韩视频在线观看一区 | 久久99热精品 | 五月婷婷色播 | 日日射视频 | 免费在线观看黄色小视频 | 国语高清精品一区二区三区 | 日本久久久久中文字幕 | 天天干天天干天天插 | 四虎永久在线 | 久久精品在线 | 亚洲人成网站在线观看青青 | 色综合色狠狠天天久久婷婷基地 | 亚洲欧美人成人综合在线50p | 国产久热精品 | 国产福利免费 | 一区二区不卡久久精品 | 亚洲精品亚洲人成人网 | 免费播放美女一级毛片 | 99视频国产热精品视频 | 国产成人18黄网站麻豆 | 欧美啪啪小视频 | 欧美在线视频一区二区三区 | 亚洲免费视频一区 | 欧美视频在线看 |