譯者 | 布加迪
JAVA生態系統里面有形形色色、五花八門的開源項目,這些項目是為了滿足各種可以想象到的需求而開發的。我們很容易錯過其中一些出色的項目。下面介紹七個開源Java項目,從全棧應用程序開發、微服務、Wasm到JVM替代方案,各種需求都能滿足。

1.Vaadin的Hilla
Hilla是一個全棧框架,擁有基于Java的后端和JavaScript前端。它支持響應式前端框架React和Lit。
Hilla讓您可以用一個簡單的命令:npx @vaadin/cli init --hilla foundry-hilla搭建一個新的全棧項目。這是一個NPM命令,但它將部署帶有Vite構建的前端目錄的標準Maven布局,并且一切都準備就緒,使用./mvnw腳本即可協同運行。
Hilla在兩個應用程序之間強制執行類型,這意味著您的IDE可以在Java API和使用它的TypeScript前端當中檢測和傳遞更改。在這個框架中,自動完成和重構完全可以正常使用。這項功能在感覺上類似全TypeScript環境中的tRPC。
Hilla還通過JPA(在Hibernate上)與MySQL和PostgreSQL等許多SQL數據庫集成持久性。
它有點像jHipster,但更自成一體。這意味著Hilla在它所能結合的技術方面不是很靈活,但它為您提供了一條更平坦的跨界之路。Hilla得到了精心的維護和記錄。如果您需要用Java構建一個全棧應用程序,并且喜歡React或Lit作為前端,Hilla是一種值得考慮的出色框架。
相關鏈接:https://www.infoworld.com/article/3655139/intro-to-hilla-the-full-stack-java-framework.html
2.jHipster
繼續圍繞全棧框架這個主題,我們接下來介紹jHipster。jHipster采用了一種非常靈活的方法,可以使用Java作為API中間件,將多種不同的技術整合到一個連貫的堆棧中。您可以從幾個響應式前端以及眾多SQL和NoSQL數據庫系統中進行選擇。
與Hilla一樣,jHipster首先使用NPM軟件包(jHipster -generator工具)生成應用程序。該工具將逐步引導您填完一份問卷,讓您對其功能有一番清楚的了解。如果您碰巧遇到ERR_PACKAGE_PATH_NOT_EXPORTED錯誤,請參閱這里的解決方案:https://Github.com/jhipster/generator-jhipster/issues/19627。
jHipster首先讓您在單體式應用程序、微服務架構或網關之間進行選擇,讓您對該框架的范圍有一些了解。如果您選擇單體式應用程序,隨后就可以使用Spring WebFlux把它變成一個類似響應式的應用程序。接下來,您可以選擇不同類型的身份驗證,比如JWT或Oauth 2。然后,您得從幾個數據庫系統中進行選擇,比如SQL、MongoDB和Cassandra,隨后從二級應用程序緩存中進行選擇,比如Ehcache、Memcached或redis。
接下來,jHipster生成器工具允許添加另外幾項技術:用于搜索引擎的Elasticsearch、使用Spring WebSocket的WebSockets、作為異步消息代理的Apache Kafka,以及使用OpenAPI-generator的API優先開發技術。接下來,您可以從幾個前端框架中選擇一個,并生成Admin UI(如果您這么選擇的話)以及幾個主題。
jHipster還擁有國際化和測試功能,它既支持Maven又支持Gradle。
這是相當強大的功能。它還能夠生成域模型、數據結構以及與之配套的UI。jHipster是構建多種類型的Java應用程序的出色選擇。
相關鏈接:https://www.infoworld.com/article/3661308/intro-to-jhipster-a-full-stack-framework-for-java-and-javascript.html
3.GraalVM
GraalVM項目于2018年3月問世,旨在提供更廣泛的虛擬機實現。GraalVM可以做JVM能做的所有事情,還不止于此:它允許用戶使用眾多語言,并輸出到眾多目標執行環境。它還集成幾種類型的編譯器,包括可以增強性能的JIT(及時)編譯器。
GraalVM可以運行任何編譯成LLVM的語言,包括C、C++、Rust和Swift等。它還可以處理字節碼語言,比如Java、Scala、Kotlin和Groovy。它還支持JavaScript、Python/ target=_blank class=infotextkey>Python、Ruby和R語言。在未來,我們有望看到GraalVM支持Zig。
這意味著我們獲得了JVM面向所有類型語言的一次寫入、隨處運行的優點。比如說,GraalVM可以拿來編譯成LLVM字節碼的C程序,使用lli命令運行它。或者,GraalVM可以使用clang直接將C代碼編譯成可執行文件。GraalVM輸出許多(但不是所有)語言和平臺的獨立執行版本。
它還包括對許多目標二進制文件的支持,比如Wasm、linux變體、macOS、windows、IOS和Android/ target=_blank class=infotextkey>安卓。針對許多目標,GraalVM支持無需安裝GraalVM即可運行的原生映像。它還允許開發人員選擇執行模式(比如JIT編譯、AOT編譯和解釋),從而微調性能配置文件。
GraalVM得到了精心的維護和記錄,擁有一個活躍的社區。整體上看,它是一個引人注目的項目,正漸漸成為一種通用語言工具。請參閱GraalVM項目主頁:https://www.graalvm.org/22.0/docs/introduction/,以了解更多信息。
4.Micronaut
Micronaut是Java開發方面的一個新思路,面向現代云和無服務器環境。它擁有眾多功能,比如用于搭建、構建、執行和測試項目的命令行工具,支持眾多技術。最重要的是,Micronaut是圍繞支持AOT的控制反轉(IOC)框架設計的,這種框架在面對大型代碼庫時保持啟動時間。
再加上面向微服務的支持,比如服務發現、跟蹤和容器化部署,對于現代Java開發來說,Micronaut是一種經過深思熟慮的、引人注目的選擇。
Micronaut提供了基于Web的項目設計器,您可以使用它來了解可以接入到Micronaut核心的工具的種類。這個工具實質上類似Spring Initializr或jHipster的在線生成器,但它有自己的特點。Micronaut的核心是響應式,支持像RxJava和Reactor這樣的響應式實現,而其他一切都建立在這個核心概念上。Micronaut包含自己的響應式HTTP客戶軟件。
Micronaut中的每個節點都是一個響應式組件,可以使用ZooKeeper或Eureka等集中式服務代理組合到更龐大的微服務架構中。
Micronaut使用戶很容易通過一站式框架來采用最佳實踐,這種框架在廣度上類似Spring,但更注重具體的實現細節。對于面對基于Java的云和無服務器環境的開發人員來說,這是一個誘人的選擇。
相關鏈接:https://www.infoworld.com/article/3658968/intro-to-micronaut-a-cloud-native-java-framework.html
5.MicroStream
在基于Java的面向對象持久性的發展過程中,MicroStream可能代表了最終的概念完善。它獲取運行時對象圖的原樣,允許使用面向對象編程語義將其持久化到任意數量的底層數據庫系統。
MicroStream允許您遵循對象和屬性這一概念,同時該框架完成保存和恢復它們的大部分工作。作為一名開發人員,您仍然需要考慮抓取策略和持久化邊界等元關注點(meta concerns),但是這些元關注點的定義非常簡單,基本上不會干擾應用程序代碼,運行起來就像不用考慮持久化一樣。
MicroStream包含根(root)的概念,它定義了持久化樹的根。一個應用程序可以有多個根,如代碼片段1所示。
代碼片段1. 用MicroStream保存和恢復
復制
// Saving
EmbeddedStorageManager manager = EmbeddedStorage.start();
manager.setRoot(myObject);
manager.storeRoot();
//Restoring
EmbeddedStorageManager storageEngine = EmbeddedStorage.start();
myObject = (MyClass) storageEngine.root();
MicroStream為Java中的對象持久化提供了一條新的思路,絕對值得開展任何新項目的開發人員關注。
6.TeaVM
將Java編譯成Wasm(WebAssembly)仍然是一個前沿領域,但TeaVM使用戶在今天就能這么做。TeaVM支持將Java字節碼轉換成JavaScript(類似google Web Toolkit)和Wasm。這些可用于創建在瀏覽器內部使用Java代碼和庫的Web應用程序。
TeaVM的工作機理是,先將代碼編譯為低級的中間表示,然后進一步優化,并轉譯成WebAssembly指令。由此生成的代碼非常高效,可以在任何支持WebAssembly的現代瀏覽器中運行。
TeaVM的主要優點之一是它支持流行的Java框架,比如Spring和Hibernate。開發人員可以使用這些框架來構建復雜的全棧Web應用程序,然后將代碼編譯成Wasm,用于基于Web的部署。
雖然TeaVM仍然是處于萌芽階段的項目——創建者將其用于其日常工作,然后將修正版和改進添加到開源代碼庫中,但它似乎提供了目前從Java到Wasm的最佳途徑。
總的來說,TeaVM是一個強大而靈活的工具,用于使用Java開發Web應用程序,它提供了在瀏覽器和其他Wasm環境中處理Java的一條有趣途徑。
7.Apache Flink
Flink啟動于2011年,現已發展成為一個領先的事件處理框架。愛彼迎?.NETflix等許多家喻戶曉的公司都將它用于實時處理,一個相對容易管理的軟件包卻為用戶提供了強大的功能。
Apache Flink將容錯和狀態管理整合到分布式、對容器友好的系統中。它可以自動擴展或縮小規模,以處理動態負載。
雖然在Docker中與Kubernetes一起運行Flink很典型,但Flink也可以使用Apache Beam等框架在無服務器基礎設施上運行,比如AWS Lambda、Azure Functions和Google Cloud Functions。這提供了僅需為處理過程中使用的計算資源付費的好處,便于更輕松更高效地擴展。
Flink在底層有很多功能,但簡單的特性很容易掌握。比如在代碼片段2中,Flink通過端口9999監視套接字,并計算在那里接收到的文本中的單詞數,然后將數據輸出到控制臺。
代碼片段2. 使用Flink處理簡單文本
復制
DataStream<String> text = env.socketTextStream("localhost", 9999);
DataStream<Tuple2<String,Integer>> wordCounts = text
.flatMap(new FlatMapFunction<String, Tuple2<String,Integer>>() {
public void flatMap(String value, Collector<Tuple2<String,Integer>> out) {
for (String word : value.split(" ")) {
out.collect(new Tuple2<String,Integer>(word, 1));
}
}
})
.keyBy(0)
.sum(1);
wordCounts.print();
您可以看到Flink與功能樣式兼容,平臺本身以一種可擴展、容錯的方式將功能擴展到云基礎設施。總之,它是一個給人留下深刻印象的項目,適用于實時事件處理。
相關鏈接:https://nightlies.apache.org/flink/flink-docs-master/docs/try-flink/flink-operations-playground/#starting-the-playground
原文標題:7 awesome Java projects you should know about,作者:Matthew Tyson






