最流行的工具并不一定是“最好的”,對于開發來說,什麼是最好的,取決于使用場景。然而,當選擇工具時,流行程度是不可忽視的一個重要因素,并不是因為工具的流行增加了其價值,而是因為廣泛使用的社群帶來了無價的資源和支援。
流行的工具更容易學習,因為會有很多人樂意幫助你。如果是開源的話,麻煩就更少了。因為有更多的人在稽核代碼和進行測試,能考慮到更多的情況。
在很多情況下,都會有一個對立的競争對手,比如apache和nginx——兩個web伺服器。apache被使用的更多,但是頂尖的網站使用nginx更多,也就是說,頂級工程師更加青睐nginx——在很多情況下,流行度可能是區分工具最重要的一點。
這份清單包含了開發java應用程式所需要的大部分工具。包括最流行的、次流行的,他們都有強大的社群支援。java的初學者需要認識一下這些工具,熟悉生态系統。
語言版本
最流行的:java 8
次流行的:java 7
java 8可能是所有版本中被接受最快的。可能是因為,java 8帶來了期待已久的現代語言特性,例如lambda表達式,解決了長久以來java飽受人們批評的冗長啰嗦的缺點。當然,性能也是一大方面。
雖然現在很多java應用和主要的應用都是用java 8寫的,但也有很大數量的java應用依然使用java 7或6。
我不會蹚java ee和spring這趟渾水,因為一談論這個,總是伴随着很多争吵,在使用者數量方面,似乎相當。也有一些第三方開發者兩者都用。
資料
rebellabs java tools and technologies landscape report 2016(figure 1.9, 1.10)
dzone guide to the java ecosystem, 2015 edition (graphs 1 & 2)
編輯器和ide
最流行的:eclipse和intellij idea(存在争議)
次流行的:netbeans
eclipse和netbeans都是免費、開源的。eclipse以強大的社群和豐富的插件聞名(開發eclipse插件非常友善),這讓eclipse平台的擴充性變得很強,但是這個ide啟動比較慢。netbeans通過整合了maven和git等讓自己變得與衆不同。intellij以性能著稱,并且是一款商業産品。它有免費和付費兩種版本。
rebellabs java tools and technologies landscape report 2016 (intellij idea was the top ide in this report, figure 1.11)
dzone guide to the java ecosystem, 2015 edition (eclipse was the top ide in this one, paragraph 4)
web framework
最流行的:angularjs,springmvc
次流行的:java server faces(jsf)
三個調查中的兩個都顯示spring mvc的受歡迎度比java server faces(jsf)高,dzone的調查顯示spring mvc和jsf之間不分伯仲。随着javascript架構在web方面的發展,也許這些都不再重要了。有一個調查顯示,angularjs相比與純java架構,在前端方面更受歡迎。
rebellabs java tools and technologies landscape report 2016 (figure 1.16)
dzone guide to the java ecosystem, 2015 edition (chart 3, paragraph 5 shows a tie)
jsf and spring mvc tie in java / jvm frameworks poll
應用伺服器
最流行的:tomcat
次流行的:wildfly
很長時間以來,tomcat都是最流行的java應用伺服器架構。它是一個輕量級架構,在一些其他調查中,jetty——另一個輕量級應用架構——領先于wildfly——最流行的java ee支援的應用伺服器。tomcat在輕量java應用方面無疑是霸主地位,是微型服務架構方面的最佳選擇。
rebellabs java tools and technologies landscape report 2016 (figure 1.13)
dzone guide to the java ecosystem, 2015 edition(chart 4)
rebellabs’ great application server debate 2013 (for a deeper dive into app server use cases)
測試架構
單元測試
最流行的:junit
名副其實的最佳java測試架構
模拟
最流行的:mockito
最受歡迎的java模拟測試架構。
自動化web浏覽測試
最流行的:selenium
selenium隻是自動化浏覽測試。開發者經常使用這個工具配合其他的測試架構,來測試大型web應用。
行為驅動開發測試(bdd)測試
最流行的:cucumber-jvm, spock
cucumber最開始隻是一個ruby項目,但是現在已經用各大主流程式設計語言實作了。spock支援jvm驅動的語言groovy,當然也支援java。mockito能做的事情它基本上都能做。
rebellabs java tools and technologies landscape report 2014
dzone guide to continuous delivery, 2015 edition (page 20)
版本控制系統
最流行的:git
次流行的:subversion
記住,使用git比僅僅使用github和簡單送出那樣更加靈活。現在來看,git赢得了版本控制大戰的勝利,很多subversion和cvs的使用者逐漸開始轉向git。
rebellabs java tools and technologies landscape report 2016 (figure 1.18)
持續內建
最流行的:jenkins
次流行的:no ci server
在這方面也有一個明顯的巨頭。jenkins靈活的插件系統,在過去的五年間逐漸控制了這個領域。其餘jenkins的競争對手中,更多的人選擇no ci server。接下來是bamboo。
rebellabs java tools and technologies landscape report 2016(figure 1.13)
dzone guide to the java ecosystem, 2015 edition (paragraph 4)
資料庫
最流行的:oracledb
次流行的:mysql
在所有這些工具中,資料庫可謂是最取決于使用場景的。取決于你要建立的應用的不同,你可能需要一個輕量的鍵值對存儲資料庫,或者存儲很多列的資料庫。對于大多數的應用來說,一般的資料庫就能滿足需求,這就是為什麼這兩種資料庫可以排名前列的原因。
oracle是這篇文章中為數不多的商業軟體,這意味着,它有很多“企業級”特性。如果你偏愛開源軟體的話,強烈推薦mysql和sqlite。
db-engines database rankings
dzone guide to databases 2016
rebellabs java tools and technologies landscape report 2016 (figure 1.14, this is the only java-specific one)
對象關系映射
最流行的:the java persistence api (jpa) / hibernate
次流行的:the java database connectivity api (jdbc)
hibernate太流行了,多年前就在java persistence api成了标準。
rebellabs java tools and technologies landscape report 2014 (page 31)
靜态代碼分析
最流行的:findbugs
次流行的:sonarqube
這兩個工具非常不同,是以很難比較。findbug是一個簡單的靜态代碼分析工具,sonarqube是一個全平台的代碼品質分析、文法檢查、代碼度量的工具。
rebellabs java tools and technologies landscape report 2014 (page 2)
文法檢查
最流行的:check
次流行的:eclipse
大型的java ide都有這個功能,但是如果你需要特定的程式專門進行類型檢查,check 是一個不錯的選擇。
dzone guide to continuous delivery, 2015 edition(page 20)
人工倉庫管理
最流行的:sonatype nexus
次流行的:jfrog artifactory
很多開發者并不使用人工倉庫管理jars,wars,庫和應用。但是如果想這麼做的話,nexus是最好的選擇。兩者都是商業軟體,apache archiva是一個開源的選擇。
rebellabs java tools and technologies landscape report 2014 (page 45)
控制反轉
最流行的:spring framework di
次流行的:google guice
spring framework在控制反轉方面做的很不錯,但是google的開發者也做了一個不錯的工具。dagger在這方面的使用者并不很多,但是正在逐漸流行起來,尤其是安卓開發方面。pokémon go使用的也是它。
poll of reddit.com/r/java
性能分析
java性能總覽
最流行的:visualvm
次流行的:no profiler
有相當一部分的開發者并不使用性能分析工具(也許他們有專業的性能優化團隊來做)。yourkit也是替代visualvm的一個不錯選擇。
載入測試
最流行的:jmeter
次流行的:loadrunner
除了這兩款工具之外,還有很多做載入性能測試的工具,是以在使用之前,最好做好充分的市場調研。jmeter是開源軟體,loadrunner是商業軟體。商業軟體的好處是服務廣泛,可以在雲端運作測試。
rebellabs java tools and technologies landscape report 2016 (figure 1.19)
編譯自動化和依賴管理
最流行的:maven
次流行的:gradle
maven無疑占據了上司地位,但是gradle的使用也很廣泛,它還是安卓的标準編譯工具。
rebellabs java tools and technologies landscape report 2016 (figure 1.12)
dzone guide to the java ecosystem, 2015 edition (chart 4)
日志庫
最流行的:log4j
次流行的日志庫尚不明确,這方面的調查比較少。這篇文章的内容場景圍繞流行的日志庫和java中的設定展開。