日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java ecj_java - 在Maven构建中使用Eclipse Java Compiler(ecj) - 堆栈内存溢出

發(fā)布時(shí)間:2024/9/19 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ecj_java - 在Maven构建中使用Eclipse Java Compiler(ecj) - 堆栈内存溢出 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

與標(biāo)準(zhǔn)Javac編譯器相比,Eclipse Java編譯器(ecj)具有很多優(yōu)勢(shì)。 它速度很快,并且可以配置更多警告和錯(cuò)誤,從而提高了代碼質(zhì)量。 編譯器中最有趣的事情之一是在編譯器內(nèi)部添加了null類(lèi)型 :通過(guò)使用@Nullable和@NotNull注釋對(duì)代碼進(jìn)行注釋,可以強(qiáng)制Eclipse編譯器在編譯時(shí)而不是運(yùn)行時(shí)檢查null訪問(wèn)。 嚴(yán)格應(yīng)用時(shí),它會(huì)教您以更安全的方式編碼(通過(guò)防止空值),并防止在測(cè)??試或生產(chǎn)過(guò)程中發(fā)生NPE異常。

在Maven內(nèi)部使用Eclipse編譯器并不難,但是Internet上存在很多錯(cuò)誤信息和舊信息,這引起了很多混亂。 我希望這有助于使事情變得正確。

要使Eclipse使用ecj編譯器,您需要使用plexus-compiler-eclipse插件,而無(wú)需使用其他任何工具。 典型的配置如下:

org.apache.maven.plugins

maven-dependency-plugin

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

eclipse

${source.jdk.version}

${target.jdk.version}

${project.basedir}/.settings/org.eclipse.jdt.core.prefs

true

true

org.codehaus.plexus

plexus-compiler-eclipse

2.8.3

org.eclipse.jdt

ecj

3.13.101

將這部分放在您的父/根pom的pluginManagement或build部分中。

現(xiàn)在讓我們解釋不同的部分;)

maven-compiler-plugin必須是最新版本。 源參數(shù)和目標(biāo)參數(shù)定義了用于源代碼和字節(jié)碼的Java版本,通常是相同的。

將參數(shù)傳遞給編譯器是一個(gè)徹底的麻煩。 請(qǐng)參閱下面的單獨(dú)部分。 在本示例中,我使用屬性設(shè)置,該屬性設(shè)置使我能夠提供詳細(xì)的設(shè)置,以進(jìn)行編譯時(shí)要出現(xiàn)的錯(cuò)誤和警告。 通過(guò)在參數(shù)中使用$ {project.basedir}變量,我對(duì)每個(gè)項(xiàng)目進(jìn)行了以下設(shè)置:每個(gè)項(xiàng)目都需要有一個(gè).settings / org.eclipse.jdt.core.prefs文件(很幸運(yùn),該文件所在的位置Eclipse IDE會(huì)保留其編譯器設(shè)置)。

對(duì)plexus-codehaus-eclipse的依賴(lài)關(guān)系定義了知道如何運(yùn)行Eclipse編譯器的插件。 2.8.3版本是撰寫(xiě)本文時(shí)的最新版本,但該版本存在一些問(wèn)題。 2.8.4版應(yīng)該帶有一個(gè)改寫(xiě)后的編譯器接口,該接口可以解決很多問(wèn)題,但在撰寫(xiě)本文時(shí)仍在使用此版本。 您可以在此處找到有關(guān)該插件的詳細(xì)信息 ,因此可以在新發(fā)行版/代碼更改后關(guān)注進(jìn)度。

另一個(gè)重要的依賴(lài)項(xiàng)是org.eclipse.jdt:ecj依賴(lài)項(xiàng):這個(gè)依賴(lài)項(xiàng)指定了要使用的ecj編譯器的確切版本 。 您應(yīng)該始終指定它,因?yàn)槿绻诎l(fā)布大版本之前一天插件決定使用另一版本的編譯器,則構(gòu)建穩(wěn)定性會(huì)受到損害;)用于ecj編譯器的版本號(hào)有點(diǎn)問(wèn)題。 您也許可以從發(fā)行列表中找到版本號(hào),然后檢查該Maven存儲(chǔ)庫(kù)中是否有類(lèi)似的東西。 但是此存儲(chǔ)庫(kù)僅包含舊版本。 當(dāng)您需要更新的版本時(shí),您顯然應(yīng)該在此處查看 該版本 -這是Eclipse 當(dāng)前發(fā)布其版本的地方 。 這個(gè)較新的存儲(chǔ)庫(kù)消除了較早版本的易于識(shí)別的版本號(hào); 如上所述,它使用的版本號(hào)如3.1xx。 Eclipse通常每年發(fā)布一次主要版本,中間還發(fā)布一個(gè)或兩個(gè)修訂版本。 3.13.x編號(hào)的第二部分對(duì)應(yīng)于Eclipse Platform項(xiàng)目中用于發(fā)行版的內(nèi)部版本控制。 很難獲得列表,但至少這些是已知的:

Version Eclipse Release Compiler Version

3.13.0 Oxygen Release 4.7

3.13.50 Oxygen 1a 4.7.1a

3.13.100 Oxygen R2 4.7.2

該版本始終以3開(kāi)頭,13或多或少是發(fā)布的“年份”。 因此,當(dāng)13為Oxygen(2017,4.7)時(shí)14可能是光子(2018,4.8)。

plexus-compiler-eclipse插件的版本:2.8.4之前

plexus-compiler-plugin 2.8.4之前的版本使用內(nèi)部API啟動(dòng)Eclipse編譯器。 這會(huì)導(dǎo)致很多事情無(wú)法正常運(yùn)行,例如,此內(nèi)部API不能解釋ecj編譯器的常規(guī)命令行參數(shù)。 這使其很難使用,并且不支持某些功能。 以下是限制列表:

注釋處理未實(shí)現(xiàn)。 任何配置都會(huì)被靜默忽略。

使用標(biāo)記添加特定參數(shù)非常困難,因?yàn)閷?shí)現(xiàn)存在多個(gè)問(wèn)題:

編譯器mojo似乎會(huì)在此處輸入的所有參數(shù)中添加破折號(hào)。 但是,此版本插件使用的內(nèi)部API需要帶破折號(hào)的參數(shù)。 因此,插件再次將其刪除。 由于這里的參數(shù)并不是真正的命令行ecj參數(shù),因此很難知道要使用哪些參數(shù):有關(guān)細(xì)節(jié),請(qǐng)查看Eclipse源代碼中的Compiler.java類(lèi)和CompilerOptions.java類(lèi)。

插件確實(shí)在此處接受一些參數(shù),但是這些參數(shù)由插件本身解釋,然后“翻譯”為內(nèi)部api。

此插件在>標(biāo)記中接受以下參數(shù):

文件名 properties>:定義一個(gè)屬性文件,該文件將傳遞給編譯器的-properties參數(shù)。 通過(guò)查看Eclipse項(xiàng)目中的.settings / org.eclipse.jdt.core.prefs文件,可以找到此文件格式的示例:該文件存儲(chǔ)編譯器的配置。 它包含警告,錯(cuò)誤和信息性消息的設(shè)置以及編譯器符合性設(shè)置。

任何內(nèi)容 errorsAsWarnings>。 有效時(shí),插件將忽略編譯器生成的任何錯(cuò)誤,并將其報(bào)告為警告。 當(dāng)然,編譯仍然會(huì)失敗,因此根據(jù)錯(cuò)誤,可能已經(jīng)編寫(xiě)/更新了.class文件。 這由插件本身處理:它只是將所有錯(cuò)誤更改為警告,并告訴世界編譯工作。

從2.8.4開(kāi)始

plexus-compiler-eclipse插件的2.8.4版本已被大部分重寫(xiě)。 現(xiàn)在,它使用ECJ編譯器的公共API,或多或少是ECJ編譯器本身。 舉例來(lái)說(shuō),這意味著ECJ插件現(xiàn)在可以做的所有事情(例如注釋處理),并且將標(biāo)簽中輸入的參數(shù)傳遞給編譯器,這意味著您應(yīng)該能夠使用ecj的幫助頁(yè)面來(lái)查找有趣的東西。要添加的參數(shù)。

像以前的版本一樣,該版本還要求您從所有參數(shù)名稱(chēng)中刪除“-”。 在將參數(shù)名稱(chēng)添加到ecj命令行之前,會(huì)再次自動(dòng)添加破折號(hào)。

該版本支持Maven定義的注釋處理。 通過(guò)將所需的部分添加到編譯Blob中,可以運(yùn)行注釋處理器。 例如:

org.apache.maven.plugins

maven-compiler-plugin

${maven-compiler-plugin.version}

db.annotationprocessing.EntityAnnotationProcessor

to.etc.domui

property-annotations-processor

1.2-SNAPSHOT

to.etc.domui

property-annotations-processor

1.2-SNAPSHOT

這部分似乎不完整,因?yàn)楦緵](méi)有引用plexus-compiler-eclipse插件,但是請(qǐng)記住,在Maven中,該配置繼承了:在這種情況下,父POM包含上面的部分,而這只是為該部分添加了一些配置。僅此POM的項(xiàng)目。

總結(jié)

以上是生活随笔為你收集整理的java ecj_java - 在Maven构建中使用Eclipse Java Compiler(ecj) - 堆栈内存溢出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。