W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本節(jié)介紹將 Micronaut 2.x 應(yīng)用程序升級(jí)到 Micronaut 3.0.0 所需的步驟。
下面的部分進(jìn)行了更詳細(xì)的介紹,但在較高層次上,該過程通常涉及:
更新版本
更新注解
選擇 Reactive 實(shí)現(xiàn)
調(diào)整受重大更改影響的代碼
通常,升級(jí)應(yīng)該很簡(jiǎn)單,但使用 OpenRewrite 可以為自己節(jié)省一些工作,OpenRewrite 是一種自動(dòng)重構(gòu)工具,您可以使用它來(lái)進(jìn)行許多必需的升級(jí)更改。
使用 OpenRewrite 自動(dòng)升級(jí)
OpenRewrite 適用于用 Java 編寫的 Micronaut 應(yīng)用程序,但 OpenRewrite 目前不支持 Kotlin 或 Groovy。與任何自動(dòng)化工具一樣,它會(huì)為您完成大部分工作,但請(qǐng)務(wù)必查看生成的更改并手動(dòng)進(jìn)行 OpenRewrite 不支持的任何更改,例如從 RxJava2 轉(zhuǎn)換為 Reactor。
如果您將使用 OpenRewrite,請(qǐng)不要進(jìn)行任何會(huì)導(dǎo)致您的應(yīng)用程序無(wú)法編譯的升級(jí)更改,例如將 Micronaut 版本更新到 3.x。這將導(dǎo)致使用 ?
javax.inject
? 注釋(如 ?@Singleton
?)或 RxJava2 類(如 ?io.reactivex.Flowable
?)的應(yīng)用程序類無(wú)法編譯,因?yàn)槟J(rèn)情況下不再包含這些依賴項(xiàng)。相反,使用 OpenRewrite 來(lái)完成初始工作,然后自己完成那些不可能或不適合自動(dòng)化的步驟。
為您的構(gòu)建添加 OpenRewrite 支持很容易,只需要添加 Gradle 或 Maven 插件并配置插件以使用 Micronaut 升級(jí)配方。
請(qǐng)參閱 Gradle 功能差異 或 Maven 功能差異 以查看所需的構(gòu)建腳本更改。
對(duì)構(gòu)建腳本進(jìn)行更改后,您可以“試運(yùn)行”Micronaut 升級(jí)配方以查看將進(jìn)行哪些更改。
對(duì)于 Gradle,運(yùn)行
$ ./gradlew rewriteDryRun
并查看在 ?build/reports/rewrite/rewrite.patch
? 中生成的差異報(bào)告
對(duì)于 Maven,運(yùn)行
$ ./mvnw rewrite:dryRun
并查看 ?target/site/rewrite/rewrite.patch
? 中生成的差異報(bào)告。
然后你可以真正運(yùn)行 recipe,讓 OpenRewrite 更新你的代碼。
對(duì)于 Gradle,運(yùn)行
$ ./gradlew rewriteRun
對(duì)于 Maven,運(yùn)行
$ ./mvnw rewrite:run
完成更改后,您可以刪除插件,但最好保留它,因?yàn)?nbsp;OpenRewrite 不會(huì)自動(dòng)運(yùn)行,只有當(dāng)您運(yùn)行其中一個(gè)命令時(shí)。除了 Micronaut 升級(jí) recipe 之外,還有更多可用的 recipe,您可能希望包含這些 recipe 以自動(dòng)執(zhí)行其他代碼更改。
該插件包含另一個(gè)命令,用于列出當(dāng)前在類路徑中的所有 recipe(在本例中是核心 recipe 加上由 ?rewrite-micronaut
? 模塊添加的 recipe)。
對(duì)于 Gradle,運(yùn)行
$ ./gradlew rewriteDiscover
對(duì)于 Maven,,運(yùn)行
$ ./mvnw rewrite:discover
可用的 recipe 和樣式將輸出到控制臺(tái)。查看 OpenRewrite 文檔 以獲取更多信息并查看許多其他可用的方法。
版本更新
如果您使用 Gradle,請(qǐng)更新 ?gradle.properties
? 中的 ?micronautVersion
? 屬性,例如
gradle.properties
micronautVersion=3.8.5
如果您使用 Maven,請(qǐng)更新 ?pom.xml
? 中的父 POM 版本和 ?micronaut.version
? 屬性,例如
pom.xml
<parent>
<groupId>io.micronaut</groupId>
<artifactId>micronaut-parent</artifactId>
<version>3.8.5</version>
</parent>
<properties>
...
<micronaut.version>3.8.5</micronaut.version>
...
</properties>
構(gòu)建插件更新
如果您使用 Micronaut Gradle 插件 更新到 最新版本。
對(duì)于 Maven 用戶,插件版本會(huì)在您更新 Micronaut 版本時(shí)自動(dòng)更新。
注入注解
?javax.inject
? 注釋不再是傳遞依賴。 Micronaut 現(xiàn)在附帶 Jakarta 注入注解。用 ?jakarta.inject
? 替換所有 ?javax.inject
? 導(dǎo)入,或者添加對(duì) ?javax-inject
? 的依賴以繼續(xù)使用舊的注釋:
Gradle | Maven |
|
|
任何依賴注釋元數(shù)據(jù)中存在的 ?javax.inject
? 注釋的代碼仍將按預(yù)期工作,但是必須更改與它們交互的任何代碼以不再引用注釋類本身。使用注釋元數(shù)據(jù)時(shí),應(yīng)使用 AnnotationUtil 類中的靜態(tài)變量(例如 ?AnnotationUtil.INJECT
?、?AnnotationUtil.SINGLETON
? 等)代替注釋類。
可空性注解
Micronaut 現(xiàn)在只帶有自己的一組注釋來(lái)聲明可空性。 findbugs、javax 和 jetbrains 注釋仍然受支持,但是您必須添加依賴項(xiàng)才能使用它們。要么切換到 Micronaut @Nullable / @NonNull 注釋,要么為您希望使用的注釋庫(kù)添加依賴項(xiàng)。
Micronaut 不再將任何響應(yīng)式實(shí)現(xiàn)作為我們?nèi)魏文K或核心庫(kù)中的默認(rèn)實(shí)現(xiàn)。升級(jí)到 Micronaut 3 需要選擇要使用的反應(yīng)流實(shí)現(xiàn),然后添加相關(guān)依賴項(xiàng)。
對(duì)于那些已經(jīng)在使用 RxJava3 或 Project Reactor 的人,升級(jí)到 Micronaut 3 應(yīng)該不需要做任何更改。如果您使用 RxJava2 并希望繼續(xù)使用它,則必須添加一個(gè)依賴項(xiàng):
Gradle | Maven |
|
|
此外,如果使用了任何 ?Rx
? HTTP 客戶端接口,則必須添加依賴項(xiàng)并且必須更新導(dǎo)入。
Gradle | Maven |
|
|
舊 | 新 |
---|---|
io.micronaut.http.client.RxHttpClient |
io.micronaut.rxjava2.http.client.RxHttpClient |
io.micronaut.http.client.RxProxyHttpClient |
io.micronaut.rxjava2.http.client.proxy.RxProxyHttpClient |
io.micronaut.http.client.RxStreamingHttpClient |
io.micronaut.rxjava2.http.client.RxStreamingHttpClient |
io.micronaut.http.client.sse.RxSseClient |
io.micronaut.rxjava2.http.client.sse.RxSseClient |
io.micronaut.websocket.RxWebSocketClient |
io.micronaut.rxjava2.http.client.websockets.RxWebSocketClient |
如果使用基于 Netty 的服務(wù)器實(shí)現(xiàn),則必須添加額外的依賴項(xiàng):
Gradle | Maven |
|
|
我們建議切換到 Project Reactor,因?yàn)檫@是 Micronaut 內(nèi)部使用的實(shí)現(xiàn)。向 RxJava2 添加依賴項(xiàng)將導(dǎo)致在應(yīng)用程序的運(yùn)行時(shí)類路徑中實(shí)現(xiàn)這兩種實(shí)現(xiàn)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: