Micronaut 升級(jí)到 Micronaut 3.x

2023-02-23 14:56 更新

本節(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
implementation("javax.inject:javax.inject:1")
<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

任何依賴注釋元數(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)。

RxJava2

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
implementation("io.micronaut.rxjava2:micronaut-rxjava2")
<dependency>
    <groupId>io.micronaut.rxjava2</groupId>
    <artifactId>micronaut-rxjava2</artifactId>
</dependency>

此外,如果使用了任何 ?Rx? HTTP 客戶端接口,則必須添加依賴項(xiàng)并且必須更新導(dǎo)入。

 Gradle  Maven
implementation("io.micronaut.rxjava2:micronaut-rxjava2-http-client")
<dependency>
    <groupId>io.micronaut.rxjava2</groupId>
    <artifactId>micronaut-rxjava2-http-client</artifactId>
</dependency>

表 1. RxJava2 HTTP 客戶端導(dǎo)入

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 
implementation("io.micronaut.rxjava2:micronaut-rxjava2-http-server-netty")
<dependency>
    <groupId>io.micronaut.rxjava2</groupId>
    <artifactId>micronaut-rxjava2-http-server-netty</artifactId>
</dependency>

我們建議切換到 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)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)