各個開發階段最流行的Java工具彙總
僅僅因為工具是最流行的并不意味着它是“最好的”。最好的總是和具體的程式設計内容相關。不過,人氣,不可否認是選擇同類工具時的重要名額。這并不是說流行本身會增加工具的價值;價值在于資源和來自于社群的支援。
流行的工具更易于學習,因為有如此多的人可以幫助你使用它們。并且流行的開源工具,往往bug較少,因為有更多的目光都集中在代碼上,有更多的人在大範圍的場景中測試它。
是以,雖然總有像Apache和Nginx這樣的對位工具——兩web伺服器:Apache被更多的網站使用,但Nginx更多的是被web上的頂級站點使用,這意味着它被一些最好的工程團隊所使用——在很多情況下,知名度可以成為工具之間的關鍵差別。
名單涵蓋了絕大多數你在開發Java應用程式時所需工具的重要内容。裡面有最流行的工具“冠軍”,涵蓋了各個類别,此外還有來自于大型Java社群調查證明其地位的在一些背景和引文下稍遜一籌的“亞軍”工具。Java初學者應該看一看所有這些頂級工具以便于更了解這個生态系統。
語言版本
冠軍:Java 8
亞軍:Java 7
Java 8有可能是迄今為止最快被采用的新版本了。這可能是因為一些期待已久的現代語言功能如lambda表達式,減少了一些Java經常被批評的冗長程度。性能的提升也是很大的一個賣點。
雖然現在新的Java app和主要的app是用Java 8寫的,但是還有大量現有的Java app仍然使用的是Java 7或6。
我不會趟進Java EE與Spring之間的競争,因為相關的統計資料總是存在争議,但是兩者在使用者數量上似乎相當接近。大約三分之一的開發人員在使用其中之一的同時還是用了另外一個。
編輯器和IDE
冠軍:(存在争議)Eclipse和IntelliJ IDEA
亞軍:Netbeans
Eclipse和Netbeans都是免費和開源的。Eclipse因其大型的社群和插件(很容易寫)的富有而聞名,這使得該平台可無休止地擴充,但有時會加載緩慢和繁瑣。Netbeans因包括如Maven和Git的整合開箱即用而顯得與衆不同。IntelliJ具有商業産品的性能和完美。它有免費和付費兩種版本。
web架構
冠軍:AngularJS,Spring MVC
亞軍:Java Server Faces(JSF)
雖然三分之二的調查顯示了Spring MVC優于Java Server Faces(JSF),但是來自于DZone大型投票(圖5)顯示Spring MVC和JSF之間的打成了平手。這可能已經沒有多大關系了,因為JavaScript架構在許多流行的web堆棧中變得越來越有價值。一項問及AngularJS與純Java Web架構使用率比較的調查顯示,在前端上,AngularJS優于最流行的Java架構。
應用伺服器
冠軍:Tomcat
亞軍:Wildfly
Tomcat已經很多年擔任最常用Java應用伺服器的稱号了。它輕巧,不會嘗試實作所有的Java EE規範。在一些調查中,Jetty,另一個輕量級的應用伺服器,領先于Wildfly——頂部Java EE——支援的應用程式伺服器。Tomcat是簡單Java應用的上司者,而輕量級的應用伺服器毫無疑問是微服務架構的首選。
測試架構
單元測試
冠軍:JUnit
實際上的Java單元測試架構。
Mocking
冠軍:Mockito
顯然是Java mocking架構中的最愛。
自動化web浏覽器測試
冠軍:Selenium
Selenium不過是自動化了浏覽器。開發人員通常與測試架構一起使用這個工具來做大規模的web應用程式測試。
行為驅動開發測試(BDD)
冠軍:Cucumber-JVM,Spock
Cucumber原本是一個Ruby項目,但現在具有針對每一種主要程式設計語言的實作。Spock支援JVM語言Groovy和Java。它還可以處理很多Mockito能做的事情。
版本控制系統
冠軍:Git
亞軍:Subversion
請記住,Git比隻用GitHub及其約定的版本控制更靈活。Git似乎已經幾乎打赢了版本控制的戰役,大多數的Subversion和CVS使用者被開發人員抓進了一套遺留的工具中。
持續內建
冠軍:Jenkins
亞軍:No CI server
這是另一個有着明确上司者的領域。Jenkins的靈活的插件系統,導緻其在過去的五年時間裡,逐漸上升到主導地位。不使用任何CI server的人比使用任意單一Jenkins競争者的人要多。最接近的競争者是Bamboo。
資料庫
冠軍:OracleDB
亞軍:MySQL
選擇資料庫相比這裡的許多其他工具,更依賴于上下文。根據你要建構的app,你可能需要一個輕巧的key-value存儲,以及一個巨大的列式資料庫。對于大多數應用程式,關系資料庫可以把這工作做好,這就是為什麼你會看到兩個關系型資料庫站到Java工具世界之巅的原因。
Oracle是這篇文章中提到的少數商業産品之一,這意味着它有很多的“企業”特點。 MySQL或甚至SQLite是開源的強大選擇。
對象關系映射(ORM)
冠軍:Java Persistence API(JPA)/Hibernate
亞軍:Java Database Connectivity API(JDBC)
Hibernate是如此受歡迎,若幹年前它得到了Java Persistence API規範的标準化。
靜态代碼分析
冠軍:FindBugs
亞軍:SonarQube
這兩個工具都在範圍上有很大的不同,是以很難比較。FindBugs是一個簡單的靜态代碼分析工具,而SonarQube是一個用于代碼品質分析,文法檢查和代碼度量的完整平台。
文法檢查
冠軍:Checkstyle
亞軍:Eclipse
此功能可以在主要的java ide中找到,但如果你需要一個單獨的程式用于專門的文法檢查(又名“linting”),Checkstyle是一個不錯的選擇。
工件管理
冠軍:Sonatype Nexus
亞軍:JFrog Artifactory
許多開發人員在版本化JAR,WAR,庫和完整的app時不使用工件倉庫。但是,如果他們這樣做的話,Nexus有使用者優勢。兩者都是商業産品。Apache Archiva是一個開源選擇。
依賴注入
冠軍:Spring Framework DI
亞軍:Google Guice
Spring架構在依賴注入上做的很好,但谷歌的開發者用Guice也創造了一個流行工具。Dagger沒有那麼普及,但它很新,并且使用者在增加,特别是圍繞Android開發。它被用于Pokémon Go。
性能分析/分析器
Java分析
冠軍:VisualVM
亞軍:No profiler
顯著數量的Java開發人員不使用任何分析器。YourKit是VisualVM另一個流行的替代分析器。
負載測試
冠軍:JMeter
亞軍:LoadRunner
除了這兩個之外,還有大量各種負載測試工具,是以一定要研究這個市場。JMeter是開源的,而LoadRunner是商業産品。商業産品的主要優點是運作測試的雲服務範圍。
自動化建構與依賴管理
冠軍:Maven
亞軍:Gradle
雖然Maven明顯領先,但Gradle仍然被廣泛用作輔助建構工具,并且是Android的标準建構工具。
日志庫
冠軍:log4j
日志庫的亞軍還不清楚,因為在這個工具類上較少有研究。這篇文章給出了圍繞Java流行的日志庫和設定問題。
譯文連結:http://www.codeceo.com/article/java-tools-every-phase-dev.html
英文原文:The Most Popular Java Tools for Every Phase of Development
翻譯作者:碼農網 – 小峰