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
相關文章
- javascript中break和continue的區別和作用JavaScript
- Function 與 Classes 元件的區別在哪?Function元件
- js中=、==、===三個的區別是什麼?並說明它們各自的工作過程JS
- shell指令碼的三種執行方式和區別指令碼
- CRM系統和ERP系統的三種區別
- jar包和war包的介紹與區別JAR
- PHP7 ?? 與 ?: 的作用和區別PHP
- C++中傳指標和傳引用的區別,各自的使用場景是什麼C++指標
- SpringMVC(3)-request域和session域的作用和區別SpringMVCSession
- jar包、war包和ear包的介紹與區別JAR
- Flume 總結(三)sources型別-1.9.0新版型別
- Eclipse、IntelliJ IDEA、PyCharm三種IDE的區別EclipseIntelliJIdeaPyCharm
- 常見的三種工廠模式區別模式
- sem和seo有什麼區別?各自的優劣勢是什麼?
- PHP 中的 -> 和 :: 的區別PHP
- c語言中作用域和儲存期的區別C語言
- 宏旺半導體分析EEPROM和FLASH的區別及各自的優缺點
- JavaScript中for in 和for of的區別JavaScript
- Js中for in 和for of的區別JS
- mysql中!=和is not的區別MySql
- Python中is和==的區別Python
- JavaScript中==和===的區別JavaScript
- Linux中“>”和“>>”的區別Linux
- Python 中 is 和 == 的區別Python
- mysql中“ ‘ “和 “ ` “的區別MySql
- 介紹java -cp & java -jar的區別JavaJAR
- C#中continue、return、break的區別及作用C#
- Java中獲取JAR檔案中資源路徑的三種方法JavaJAR
- Storm,Spark和Samza三種框架有何區別?ORMSpark框架
- Vivo NEX和小米8的區別,Vivo NEX和小米8各自有何可取之處?
- Flutter Key的原理和使用(三) LocalKey的三種型別Flutter型別
- python語言中類和函式的作用及區別!Python函式
- JS中的!=、== 、!==、=== 的用法和區別JS
- Python中read()、readline()和readlines()三者間的區別和用法Python
- oracle知識整理(1) union和union all的區別,left join和right join的區別(各種join的區別)Oracle
- Java Web中requset,session,application 的作用域及區別JavaWebSessionAPP
- java 中equals和==的區別Java
- SQL中where和on的區別SQL