一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

2021-02-04 23:50BAT的烏托邦YourBatman 編程技術

本文能幫你解釋為毛項目中的xxx.iml,.project等文件都絕對不要提交到github倉庫,否則會被罰工資;從大了說本文告訴了你是Maven幫你做到了屏蔽差異讓項目標準化的,這是不用再關心具體IDEA的底層原因。

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

前言你好,我是A哥(YourBatman)。

做Java開發這么久了,是否曾經疑問過:

  • 為何項目中的xxx.iml、.idea文件夾明明起到重要作用,卻不能被提交到git倉庫,否則工資容易受損呢?
  • 這個項目他是用Eclipse開發的,我現在要用IDEA繼續,擔心結構上出現問題?
  • 為什么一個Maven項目被導入進IDEA了能正常work,它的項目結構Project Structure是咋樣的?

若你也有這些疑問,那么看到本文你就來對了。

IntelliJ IDEA和Eclipse作為當下最為流行的兩大IDE,它們在界面、操作、項目管理上是有很大差異的。正所謂兩派之爭必有一斗,到底該以誰的項目結構為標準?誰又選擇去妥協呢?No,二者的答案都是這個

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

本文提綱

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

版本約定

  • IntelliJ IDEA:2020.3.2
  • SpringToolSuite:4.9.0.RELEASE

正文

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

IntelliJ IDEA項目

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

  1. 誰再把IDEA的Project比作Eclipse的Workspace,我就跟誰急
  2. 玩轉IDEA項目結構Project Structure,打Jar包、模塊/依賴管理全搞定

Eclipse項目

因為Eclipse項目本系列文章并未提及過,所以這里簡單的介紹下。

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

新建一個Project

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

點擊Next:

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

點擊Finish,Project創建完成了。

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

Project項目設置

鼠標選中項目(和IDEA不一樣,此處必須選中),右鍵選擇Properties就可以對該項目進行配置:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

Eclipse沒有Module概念

如果想在hello項目下創建一個hello-client項目怎么辦?答曰:在邏輯層面eclipse做不到,只能在路徑結構下體現,具體創建動作為:點擊新建項目,然后自定義這個路徑,把它放在hello下面。

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

點擊Finish后,項目結構上看如下圖所示:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

Package Explorer視圖

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

解釋.classpath和.project

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

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

看過A哥上篇文章(誰再把IDEA的Project比作Eclipse的Workspace,我就跟誰急)的同學知道IDEA里有兩個特殊的文件workspace.xml和${moduleName}.iml,同樣的eclipse里也有,我們可粗略的稱作它們為環境描述符和項目描述符。

.classpath文件

.classpath文件存儲了項目編譯時Java構建路徑,這個路徑用$CLASSPATH可引用到。hello項目的此文件內容如下:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

.project文件

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

對幾個標簽稍稍解釋下:

  • name:項目名稱,一般和文件夾名稱同名,但它們是兩碼事
  • comment:項目注釋
  • buildCommand:構建使用的命令。這里值是org.eclipse.jdt.core.javabuilder,也就是說是eclipse幫你編譯的,而非你自己手動輸入java命令編譯
  • natures:項目類型,這里org.eclipse.jdt.core.javanature表示一個java項目

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

解釋.settings目錄

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

因為類型眾多,這里介紹幾個較為常見的代表一下:

  • org.eclipse.core.resources.prefs:規定文件的編碼。盡量不要讓一個項目中出現多種編碼喲

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

結構差異,IDEA跟Eclipse打一架?

了解了IDEA和Eclipse的項目結構后發現,它倆對項目的管理方式是完全不一樣的:

  1. 不同的邏輯結構
  2. 不同的元數據文件
  3. 元數據文件的內容、格式都不一樣

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

就因為這些差異的存在,就出現了不兼容問題:IDEA項目Eclipse不認識,反過來同理。雖然IDEA做了導入Eclipse項目的功能,但兼容性并不完美,完全是為了“協助”Eclipse倒戈IDEA的“權宜之計”而已~

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

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

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

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

# eclipse ignore 

.settings/ 

.project 

.classpath 

 

# idea ignore 

.idea/ 

*.ipr 

*.iml 

*.iws 

創建/導入Maven項目

既然Maven項目已然成為標準,因此在實際情況中不管是新創建,還是接觸到的99.99都是maven項目。IDEA和Eclipse都提供了對maven項目的“完美”支持。

IDEA和Maven項目

創建Maven項目:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

點擊Finish,打開一個新的IDEA窗口,大功告成:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

點擊Finish,并在子模塊里添加Spring Context依賴:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

所以現在即使在hello-service模塊里也能正常使用spring-conext相關類嘍:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

什么原因?這時 上篇文章 的內容就起作用啦,查看項目的結構Project Structure一探究竟:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

hello-service模塊里的依賴:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

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

打開/導入Maven項目:

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

導入maven模塊時稍微有點不一樣,了解一下:

?注意:在IDEA里Project項目是不存在import導入這么一說的,因為它是個獨立體,只能說是打開項目?

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

選中某個文件夾后,確定進入下一步:

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

如圖,IDEA支持把多種類型的模塊導入進來,不可謂不強大:

  • Android Gradle:若是安卓項目,選此項
  • Eclipse:若是Eclipse項目,選此項(請注意:有eclipse元數據文件的才叫eclipse項目,而并不是對方用Eclipse開發就一定是eclipse項目,畢竟還有可能是maven項目嘛)
  • Gradle項目:若是Gradle項目,選此項。比如Spring Framework項目
  • maven項目:99%情況下,我們選擇的應該都是此項

點擊Finish即可把該模塊導入進來了。

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

Eclipse和Maven項目

大同小異,略。

Maven一統天下

?說明:本文并非Maven專題,僅對其一統天下的現狀簡單聊幾句?

IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

Maven是一個項目管理工具:包含了一個項目對象模型 (POM:Project Object Model),一組標準項目結構,一個項目生命周期(Project Lifecycle),一個依賴管理系統(Dependency Management System),和用來運行定義在生命周期階段(phase)中插件(plugin)目標(goal)的邏輯。

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

也不知道Maven什么時候早已一統天下了,反正A哥知道早在2015年Spring Framework團隊就宣布其官網 再也不提供 Jar包的下載;在github上幾乎所有的流行的Java項目都用通過Maven來構建和管理的;對于年輕一點的程序員來說,如果一個項目不是Maven項目,大概率不知如何上手,因為上學的時候默認就是按照maven項目來講的。

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

 IDEA跟Eclipse險些打一架 Maven:都住手,我來一統天下

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

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

總結

本文介紹了IDEA項目和Eclipse項目的差異,目的是徹底的弄明白二者在項目管理上的區別,不要再人云亦云。

從小了說,本文能幫你解釋為毛項目中的xxx.iml,.project等文件都絕對不要提交到github倉庫,否則會被罰工資;從大了說本文告訴了你是Maven幫你做到了屏蔽差異讓項目標準化的,這是不用再關心具體IDEA的底層原因。

?說明:在Maven之前是Ant來管理和構建項目,做到統一化。但因Ant有點久遠了,所以本文直接以大家更為熟悉的Maven做解答?當然嘍,本文并非Maven專題,所以對它的描述也只是一筆帶過。Maven的作用遠遠不止如此,對Maven感興趣的請移步Maven專欄查看哈。

下篇文章將介紹平時使用IDEA打開maven項目的一個痛點問題:Maven項目某些模塊無法被IDEA自動識別,如何手動批量導入/識別呢?

本文思考題

本文所屬專欄:IDEA,后臺回復專欄名即可獲取全部內容,已被https://www.yourbatman.cn收錄。

看完了不一定懂,看懂了不一定會。來,文末3個思考題幫你復盤:

如何使用Eclipse創建多“模塊”項目?

Maven項目被IDEA和Eclipse加載后,在各自IDE的項目結構上各是什么表現?

有時候Maven模塊無法被IDEA自動發現,那么如何手n動發現Mave模塊呢?

原文地址:https://mp.weixin.qq.com/s/I8I1m2YifpUrCyjFkJ4xmA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色狠狠色狠狠综合天天 | 精品在线观看一区 | 爽爽影院免费观看 | 日本老妇人乱视频 | 亚洲精品人成网在线播放影院 | 国产成人综合网 | 成人国产网站v片免费观看 成人国产精品视频 | 精品视频在线观看 | 垫底辣妹免费观看完整版 | 99热久久这里只精品国产www | 亚洲国产精品久久精品成人网站 | 国产99久久精品一区二区 | 大陆国产vs国产对白 | 成人欧美一区在线视频在线观看 | 十大免费b2b网站 | 扒开双腿疯狂进出爽爽动态图 | 俄罗斯年轻男同gay69 | 日韩欧美一区二区不卡 | 男人j放进女人的p视频免费 | 不知火舞被c视频在线播放 不卡一区二区三区卡 | 消息称老熟妇乱视频一区二区 | 日韩精品特黄毛片免费看 | 日处女b | 禁忌h1v1怀孕 | 91精品手机国产在线观 | 激情婷婷综合久久久久 | 成人网18免费网 | h版欧美大片免费观看 | 91免费破解版 | 国产小视频网站 | 狠狠综合视频精品播放 | 国精品午夜dy8888狼人 | 国产新疆成人a一片在线观看 | 日本亚洲免费 | 黄网国产 | 好姑娘在线视频观看免费 | 青青国产成人久久91网 | 国产精品天天在线 | 欧美精品超清在线播放 | 精品国产乱码久久久久久人妻 | 麻麻与子乱肉小说怀孕 |