IntelliJIDEA中看到classes,sources,javadocs三種jar的區別和各自的作用
在 intelliJ idea 裡面看到 ,Project Structure——》 Libraries ——》 Sources 的路徑是紅色的
看圖會比較好。以guava包為例來說明。
可以看到在這看整個maven專案的依賴時,發現如圖的情況,這紅色是什麼情況,是報錯嗎?需要處理嗎?這3個不同jar都是什麼東西,各自有啥作用。大概會有這麼些疑問吧。️。
假如在依賴庫如上的情況下,你點進去,看guava的原始碼,會有下圖的效果。
給你2個選擇,一個是選則source,一個是下載source。注意,這個時候,你看到的檔案是class檔案,是可以直接執行的檔案,之所以能看到內部的具體實現,是idea給你自動逆轉換啦。感謝idea吧
(記得當年剛剛工作的時候,使用的eclipse,然後debug的時候,假如要進入這些個沒有sources的jar的時候,就進不去這個class檔案,他還傻乎乎的給個彈窗,讓我倒入sources檔案,還是idea高階,直接喊你下載。)
這個時候點選download sources,下載原始碼。
這個時候,你看到的檔案,就變成啦Java檔案,而且,還帶上了很多的註釋。
這個時候,再看倉庫library的變化
可以看到剛剛還是紅色的sources檔案,現在有啦,下面的Javadoc還沒有。
然後,再看mven的repository裡面的情況
可以看到jar型別的檔案jar包,這地方有2個。
(有麼有疑惑,這個帶sources的jar怎麼比classes的jar還小呢?因為Java檔案在編譯生成class檔案的時候,會對程式碼進行優化,這個優化是針對執行的,所以,由Java檔案變class檔案,他到底是變大,還是變小,這個是不確定。)
三個jar包同時存在的也不是沒有,看下面
最後,說一下,各自的作用。
classes的jar,是正兒八經執行專案的時候使用的,因為這個是直接編譯好的class檔案,可以直接被虛擬機器執行的。
sources的jar,就是給開發人員看的,自己在學習和debug的時候,可以看到jar包裡面的各種註釋說明,方便學習。
Javadoc的jar,也和sources的jar一個道理吧,起到輔助的作用吧。這個不是必須的,guava就沒有提示你下載這個,就已經顯示了很多的註釋了。
所以,
最開始的那個圖裡面的只要classes的jar不報錯,下面的2個jar,可有可無。不是什麼問題。
瞭解原理就好啦。
我寫完文章,給自己點個贊,不過分吧,
不過分,那我可就點啦啊。
我先點為敬,你們隨意。大家隨意。不要客氣。。。
作者:李學凱
來源:CSDN
相關文章
- Oracle驅動classes12.jar 與ojdbc14.jar的區別OracleJARJDBC
- .NET中的三種Timer的區別和用法
- javascript中break和continue的區別和作用JavaScript
- Function 與 Classes 元件的區別在哪?Function元件
- C++三種容器:list、vector和deque的區別C++
- ojdbc14.jar 與 classes12.jarJDBCJAR
- 三種連結方式的區別
- C++中傳指標和傳引用的區別,各自的使用場景是什麼C++指標
- PHP7 ?? 與 ?: 的作用和區別PHP
- jar包和war包的介紹與區別JAR
- 宏旺半導體分析EEPROM和FLASH的區別及各自的優缺點
- 英特爾看到“區塊鏈挖礦”在基因測序中的作用區塊鏈
- CRM系統和ERP系統的三種區別
- maven中snapshot快照庫和release釋出庫的區別和作用Maven
- String中三種加法的區別
- SQL Server 三種複製的區別SQLServer
- Flume 總結(三)sources型別-1.9.0新版型別
- LESS巢狀中的Mixins和classes巢狀
- 交換機,集線器,路由器這三者如何區分,各自的作用是什麼?路由器
- PHP 中的 -> 和 :: 的區別PHP
- sem和seo有什麼區別?各自的優劣勢是什麼?
- Eclipse引入jar包的三種方式EclipseJAR
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- mysql中“ ‘ “和 “ ` “的區別MySql
- Js中for in 和for of的區別JS
- JavaScript中==和===的區別JavaScript
- 常見的三種工廠模式區別模式
- jar包、war包和ear包的介紹與區別JAR
- Python中逗號的三種作用例項分析Python
- jquery的$.extend和$.fn.extend作用及區別jQuery
- Storm,Spark和Samza三種框架有何區別?ORMSpark框架
- Android 中 uses-feature 和 uses-permission的作用 關係和區別Android
- SpringMVC(3)-request域和session域的作用和區別SpringMVCSession
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- Vivo NEX和小米8的區別,Vivo NEX和小米8各自有何可取之處?
- 介紹java -cp & java -jar的區別JavaJAR
- hash和history兩種模式的區別模式