什么是IDEA、Eclipse、Maven

本篇內(nèi)容介紹了“什么是IDEA、Eclipse、Maven”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

10多年的南溪網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整南溪建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“南溪網(wǎng)站設(shè)計(jì)”,“南溪網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

本文提綱

什么是IDEA、Eclipse、Maven

版本約定

  • IntelliJ IDEA:2020.3.2

  • SpringToolSuite:4.9.0.RELEASE

正文

接下來本文就從項(xiàng)目層面開始,探究這些問題都是如何被解決的~

IntelliJ IDEA項(xiàng)目

來吧,都在該系列的前倆篇文章里:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 誰再把IDEA的Project比作Eclipse的Workspace,我就跟誰急

  3. 玩轉(zhuǎn)IDEA項(xiàng)目結(jié)構(gòu)Project Structure,打Jar包、模塊/依賴管理全搞定

Eclipse項(xiàng)目

因?yàn)镋clipse項(xiàng)目本系列文章并未提及過,所以這里簡單的介紹下。

實(shí)話說,A哥自2015年入行就從沒用過原生的eclipse,所以這里就以基于Eclipse的STS為例了哈,道理都一樣。

什么是IDEA、Eclipse、Maven

Eclipse它有workspace操作空間的概念,所有Project項(xiàng)目都是放在操作空間里管理起來的。換句話講,Eclipse的一個窗口打開的是一整個工作空間,里面有多少Project就加載進(jìn)來多少個,因此它可以實(shí)現(xiàn):一個窗口同時打開多個Project項(xiàng)目。

新建一個Project

以新建一個名為hello的java項(xiàng)目為例:File -> New -> Java Project...

什么是IDEA、Eclipse、Maven  

習(xí)慣了IDEA的選手,看到這個eclipse的這個頁面,是否想感嘆一句:一個項(xiàng)目創(chuàng)建頁面為毛整這么復(fù)雜?像JRE、working  sets這種選項(xiàng)完全沒必要在創(chuàng)建時讓選嘛,頁面太不精簡了,干擾信息太多。

點(diǎn)擊Next:

 什么是IDEA、Eclipse、Maven

呃,同樣的感覺,且不說是新手,即使是老手看到這個頁面也“亂花漸欲迷人眼”吧,O(∩_∩)O哈哈~。eclipse的頁面設(shè)計(jì)基本都有這個毛病:過于復(fù)雜,干擾選項(xiàng)太多。比如這里插一個class類的創(chuàng)建頁面,你感受一下:

什么是IDEA、Eclipse、Maven

點(diǎn)擊Finish,Project創(chuàng)建完成了。

什么是IDEA、Eclipse、Maven

Project項(xiàng)目設(shè)置

鼠標(biāo)選中項(xiàng)目(和IDEA不一樣,此處必須選中),右鍵選擇Properties就可以對該項(xiàng)目進(jìn)行配置:

什么是IDEA、Eclipse、Maven

配置項(xiàng)“多如牛毛”,令人望而生畏呀。這里就不一一介紹了,圖形化的東西了解起來也容易。但是你是否發(fā)現(xiàn),眾多配置項(xiàng)中卻不見Module字樣,怎么肥四?

Eclipse沒有Module概念

如果想在hello項(xiàng)目下創(chuàng)建一個hello-client項(xiàng)目怎么辦?答曰:在邏輯層面eclipse做不到,只能在路徑結(jié)構(gòu)下體現(xiàn),具體創(chuàng)建動作為:點(diǎn)擊新建項(xiàng)目,然后自定義這個路徑,把它放在hello下面。

 什么是IDEA、Eclipse、Maven

點(diǎn)擊Finish后,項(xiàng)目結(jié)構(gòu)上看如下圖所示:

什么是IDEA、Eclipse、Maven

上圖是Project Explorer,但若你切換到Package Explorer的話截圖如下:

什么是IDEA、Eclipse、Maven

從這里能看出,eclipse在邏輯上是不存在層級概念的,沒有module只有Project。

即便你導(dǎo)入的是maven項(xiàng)目(maven有模塊概念)也是這樣子,這里以dubbo為例:

什么是IDEA、Eclipse、Maven

 什么是IDEA、Eclipse、Maven

Package Explorer視圖

所以請記住,這是和IDEA在邏輯結(jié)構(gòu)上非常大的不同:Eclipse里并不存在Module,并不存在Module,并不存在Module。

解釋.classpath和.project

eclipse的每個項(xiàng)目,還有兩個附加文件:.classpath文件和.project文件。這兩個文件比較特殊,沒有文件名,以.開頭,是隱藏文件。

 什么是IDEA、Eclipse、Maven

看過A哥上篇文章(誰再把IDEA的Project比作Eclipse的Workspace,我就跟誰急)的同學(xué)知道IDEA里有兩個特殊的文件workspace.xml和${moduleName}.iml,同樣的eclipse里也有,我們可粗略的稱作它們?yōu)榄h(huán)境描述符和項(xiàng)目描述符。

.classpath文件

.classpath文件存儲了項(xiàng)目編譯時Java構(gòu)建路徑,這個路徑用$CLASSPATH可引用到。hello項(xiàng)目的此文件內(nèi)容如下:

什么是IDEA、Eclipse、Maven

簡而言之,.classpath定義了這個項(xiàng)目在編譯時所使用的$CLASSPATH類路徑。

.project文件

.project提供了項(xiàng)目的完整描述,包括名稱、描述、項(xiàng)目類型等等。

什么是IDEA、Eclipse、Maven

對幾個標(biāo)簽稍稍解釋下:

  • name:項(xiàng)目名稱,一般和文件夾名稱同名,但它們是兩碼事

  • comment:項(xiàng)目注釋

  • buildCommand:構(gòu)建使用的命令。這里值是org.eclipse.jdt.core.javabuilder,也就是說是eclipse幫你編譯的,而非你自己手動輸入java命令編譯

  • natures:項(xiàng)目類型,這里org.eclipse.jdt.core.javanature表示一個java項(xiàng)目

簡而言之,.project是項(xiàng)目描述符,有了這個文件,eclipse加載項(xiàng)目時就可以按照它顯示啦。

解釋.settings目錄

eclipse項(xiàng)目.settings目錄下的配置比較雜,各種后綴名的都可能見到,絕大多數(shù)是文本文件,格式為properties或xml。Properties類型文件多數(shù)以.prefs為后綴名,XML類型文件多數(shù)以.*、.xml為后綴名。

什么是IDEA、Eclipse、Maven

因?yàn)轭愋捅姸啵@里介紹幾個較為常見的代表一下:

  • org.eclipse.core.resources.prefs:規(guī)定文件的編碼。盡量不要讓一個項(xiàng)目中出現(xiàn)多種編碼喲

 什么是IDEA、Eclipse、Maven

  • org.eclipse.jdt.core.prefs:指定一些Java編譯的特性,比如編譯版本、警告級別等等

 什么是IDEA、Eclipse、Maven

結(jié)構(gòu)差異,IDEA跟Eclipse打一架?

了解了IDEA和Eclipse的項(xiàng)目結(jié)構(gòu)后發(fā)現(xiàn),它倆對項(xiàng)目的管理方式是完全不一樣的:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 不同的邏輯結(jié)構(gòu)

  3. 不同的元數(shù)據(jù)文件

  4. 元數(shù)據(jù)文件的內(nèi)容、格式都不一樣

 什么是IDEA、Eclipse、Maven

就因?yàn)檫@些差異的存在,就出現(xiàn)了不兼容問題:IDEA項(xiàng)目Eclipse不認(rèn)識,反過來同理。雖然IDEA做了導(dǎo)入Eclipse項(xiàng)目的功能,但兼容性并不完美,完全是為了“協(xié)助”Eclipse倒戈IDEA的“權(quán)宜之計(jì)”而已~

也許你會說這影響不大呀,畢竟一個團(tuán)隊(duì)內(nèi)一般不會出現(xiàn)既使用IDEA,又使用Eclipse的情況。誠然,一般確實(shí)不會有此類情況發(fā)生,but,視野放大點(diǎn)再想想呢?比如,如果是個開源項(xiàng)目呢?它面向的是所有開發(fā)者一起協(xié)作,總不能限制人家的IDE吧。還是拿dubbo來舉例:要把源碼全部提交到github上去的話,應(yīng)該用IDEA的元數(shù)據(jù)文件還是Eclipse的呢?對于項(xiàng)目本身來說,項(xiàng)目名稱、結(jié)構(gòu)、依賴管理等都在元數(shù)據(jù)文件里保存著哩~

很明顯,用誰的都不合適,畢竟現(xiàn)在Java平臺的IDE還三足鼎立呢(至少還有兩足),“得罪”任何一方都是不行的。況且,對于程序本身來說,IDE并不屬于它的一部分,所以即便IntelliJ  IDEA已一統(tǒng)天下了也不應(yīng)該依靠它的元數(shù)據(jù)文件去幫你管理依賴、管理項(xiàng)目?;o百日紅,明天誰知道呢~

這樣子炒來炒去不會有結(jié)論的,那怎么辦,難道非得“動手”?

什么是IDEA、Eclipse、Maven

面對這種情況,需要做的就是標(biāo)準(zhǔn)化,讓所有的IDE都支持識別同一種項(xiàng)目/目錄結(jié)構(gòu),問題自然迎刃而解了。這個時候有“人”就扛起了大旗,承擔(dān)了這種角色的,它就是Maven(發(fā)音為[?mev?n],而不是“馬瘟”)。

 什么是IDEA、Eclipse、Maven

不管是何種IDE,都能識別和加載maven項(xiàng)目,解析其pom.xml文件生成為IDEA自己的元數(shù)據(jù)文件即可正常完成加載啦。因此,對于開發(fā)者來說,只需要面向Maven管理項(xiàng)目即可,再也無需關(guān)心具體IDE,這種差異性交由它幫你擺平。繼續(xù)拿dubbo舉例,在實(shí)操中它確實(shí)也是這么干的:只往github里提交了maven結(jié)構(gòu)的源碼和pom.xml元數(shù)據(jù)文件:

什么是IDEA、Eclipse、Maven

從此即使你用Eclipse,我用IDEA,也能正常的相愛了。

值得注意的是:既然使用了maven的項(xiàng)目結(jié)構(gòu),那么提交到github時,一些IDE自己的元數(shù)據(jù)文件就不能再提交了嘍。因此,一般都會在項(xiàng)目的.gitignore文件里添加上如下配置項(xiàng):

# eclipse ignore .settings/ .project .classpath  # idea ignore .idea/ *.ipr *.iml *.iws

創(chuàng)建/導(dǎo)入Maven項(xiàng)目

既然Maven項(xiàng)目已然成為標(biāo)準(zhǔn),因此在實(shí)際情況中不管是新創(chuàng)建,還是接觸到的99.99都是maven項(xiàng)目。IDEA和Eclipse都提供了對maven項(xiàng)目的“完美”支持。

IDEA和Maven項(xiàng)目

創(chuàng)建Maven項(xiàng)目:

什么是IDEA、Eclipse、Maven

左邊類別中選擇Maven就表示需要創(chuàng)建一個maven項(xiàng)目,點(diǎn)擊Next(當(dāng)然你也可以選擇一個模版骨架,如果公司有統(tǒng)一骨架的話):

什么是IDEA、Eclipse、Maven

點(diǎn)擊Finish,打開一個新的IDEA窗口,大功告成:

什么是IDEA、Eclipse、Maven

繼續(xù)創(chuàng)建兩個子模塊(hello-client和hello-service),同樣也用Maven項(xiàng)目:

什么是IDEA、Eclipse、Maven

點(diǎn)擊Finish,并在子模塊里添加Spring Context依賴:

什么是IDEA、Eclipse、Maven

并讓hello-service模塊依賴hello-client模塊:

什么是IDEA、Eclipse、Maven

所以現(xiàn)在即使在hello-service模塊里也能正常使用spring-conext相關(guān)類嘍:

什么是IDEA、Eclipse、Maven

什么原因?這時 上篇文章 的內(nèi)容就起作用啦,查看項(xiàng)目的結(jié)構(gòu)Project Structure一探究竟:

什么是IDEA、Eclipse、Maven  

hello-client模塊里的依賴:spring-context

什么是IDEA、Eclipse、Maven

hello-service模塊里的依賴:

什么是IDEA、Eclipse、Maven

這里有spring-context的依賴,所以就能夠正常使用。

發(fā)現(xiàn)沒有,在創(chuàng)建此項(xiàng)目時,開發(fā)者只需要關(guān)心Maven方式創(chuàng)建,模塊依賴的時候也只需更改Maven的元數(shù)據(jù)文件pom.xml即可,IDEA我會自動“解析”好放在項(xiàng)目結(jié)構(gòu)Project  Structure里并保存在它自己的元數(shù)據(jù)文件中(如xxx.iml文件等),從而確保了正常運(yùn)行和管理。

打開/導(dǎo)入Maven項(xiàng)目:

什么是IDEA、Eclipse、Maven

打開窗口,選中pom文件(或者頂層文件夾)即可搞定。

導(dǎo)入maven模塊時稍微有點(diǎn)不一樣,了解一下:

?注意:在IDEA里Project項(xiàng)目是不存在import導(dǎo)入這么一說的,因?yàn)樗莻€獨(dú)立體,只能說是打開項(xiàng)目?

什么是IDEA、Eclipse、Maven

選中某個文件夾后,確定進(jìn)入下一步:

 什么是IDEA、Eclipse、Maven

如圖,IDEA支持把多種類型的模塊導(dǎo)入進(jìn)來,不可謂不強(qiáng)大:

  • Android Gradle:若是安卓項(xiàng)目,選此項(xiàng)

  • Eclipse:若是Eclipse項(xiàng)目,選此項(xiàng)(請注意:有eclipse元數(shù)據(jù)文件的才叫eclipse項(xiàng)目,而并不是對方用Eclipse開發(fā)就一定是eclipse項(xiàng)目,畢竟還有可能是maven項(xiàng)目嘛)

  • Gradle項(xiàng)目:若是Gradle項(xiàng)目,選此項(xiàng)。比如Spring Framework項(xiàng)目

  • maven項(xiàng)目:99%情況下,我們選擇的應(yīng)該都是此項(xiàng)

點(diǎn)擊Finish即可把該模塊導(dǎo)入進(jìn)來了。

值得一提:很多“老程序員”在一個IDEA窗口里看似顯示了多個“項(xiàng)目”,其實(shí)就是把一個Project當(dāng)作一個Module模塊導(dǎo)入進(jìn)來了,這樣做是非常不建議的,不信打開你的Project  Structure瞅一眼,簡直亂如麻,就是災(zāi)難無法管理。本系列前面文章詳細(xì)介紹了這么做不妥的原因,并給了最佳實(shí)踐,歡迎前往參閱。

Eclipse和Maven項(xiàng)目

大同小異,略。

Maven一統(tǒng)天下

?說明:本文并非Maven專題,僅對其一統(tǒng)天下的現(xiàn)狀簡單聊幾句?

什么是IDEA、Eclipse、Maven

Maven是一個項(xiàng)目管理工具:包含了一個項(xiàng)目對象模型 (POM:Project Object  Model),一組標(biāo)準(zhǔn)項(xiàng)目結(jié)構(gòu),一個項(xiàng)目生命周期(Project Lifecycle),一個依賴管理系統(tǒng)(Dependency Management  System),和用來運(yùn)行定義在生命周期階段(phase)中插件(plugin)目標(biāo)(goal)的邏輯。

Maven的每個功能都是殺手級別的存在,非常強(qiáng)大和好用,中大型項(xiàng)目必備。譬如其依賴管理系統(tǒng),若沒有它的話依賴一個Jar得先去官網(wǎng)down一個對應(yīng)版本的下來,然后添加到IDE里,打包的時候一起打進(jìn)去,可謂麻煩至極且容易出錯。

也不知道Maven什么時候早已一統(tǒng)天下了,反正A哥知道早在2015年Spring Framework團(tuán)隊(duì)就宣布其官網(wǎng) 再也不提供  Jar包的下載;在github上幾乎所有的流行的Java項(xiàng)目都用通過Maven來構(gòu)建和管理的;對于年輕一點(diǎn)的程序員來說,如果一個項(xiàng)目不是Maven項(xiàng)目,大概率不知如何上手,因?yàn)樯蠈W(xué)的時候默認(rèn)就是按照maven項(xiàng)目來講的。

如今2021年了,Maven項(xiàng)目是絕對的王者,事實(shí)的標(biāo)準(zhǔn)。不客氣的說“幾乎所有”中大型Java項(xiàng)目都是Maven項(xiàng)目(Spring  Boot默認(rèn)就是Maven項(xiàng)目),這或許是它的最大貢獻(xiàn)之一,讓全世界的Java開發(fā)者們統(tǒng)一了“語言”。Maven的存在也極大的鞏固了Java生態(tài),降低管理、構(gòu)建、依賴管理的門檻,使得一直能以保持活力。

 什么是IDEA、Eclipse、Maven

說到Maven就不得不提一提Gradle??赡苡型瑢W(xué)會說Gradle會替代Maven成為下一代最流行的項(xiàng)目管理構(gòu)建工具,不信你看Spring  Framework都遷過去用Gradle構(gòu)建了。誠然Gradle作為新一代產(chǎn)品有很多“過人之處”,但在可預(yù)見的將來,Java平臺里Maven依舊是絕對的標(biāo)準(zhǔn),無可撼動。畢竟Maven功能非常完善,關(guān)鍵是沒有致命的缺點(diǎn),換的動力并不大的。而且存量市場過于龐大,船大難掉頭甚至不會掉頭。就像當(dāng)年的xhtml一直雄心勃勃想干掉html一樣,最后,你懂的~

?Gradle在Android開發(fā)中是主流,因此對于這種“新新技術(shù)”采用Gradle是不錯的選擇?

“什么是IDEA、Eclipse、Maven”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)頁題目:什么是IDEA、Eclipse、Maven
轉(zhuǎn)載源于:http://muchs.cn/article16/ghjdgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作外貿(mào)網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名

網(wǎng)站設(shè)計(jì)公司知識