1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Quarkusのバージョンを上げたら"Quarkus REST"と"RESTEasy Classic"の混在で怒られた

Posted at

はじめに

Quarkusのバージョンを上げた(3.4.1から3.15.2まで上げた)あと、quarkusDevでのアプリケーション起動時に↓のエラーが発生しました。

> :ma2025-03-02 16:00:35,049 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errorsUTING [18s]
        [error]: Build step io.quarkus.resteasy.reactive.common.deployment.ResteasyReactiveCommonProcessor#checkMixingStacks threw an exception: jakarta.enterprise.inject.spi.DeploymentException: Mixing Quarkus REST and RESTEasy Classic server parts is not supported
        at io.quarkus.resteasy.reactive.common.deployment.ResteasyReactiveCommonProcessor.checkMixingStacks(ResteasyReactiveCommonProcessor.java:108)
        at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:733)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:856)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:256)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2516)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2495)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1521)
        at java.base/java.lang.Thread.run(Thread.java:1583)
        at org.jboss.threads.JBossThread.run(JBossThread.java:483)

これを解決したときの書き残しです。

原因

エラーメッセージにあるMixing Quarkus REST and RESTEasy Classic server parts is not supportedが原因です。

つまり、従来のRESTEasy Classicと、より新しい実装であるQuarkus RESTの混在はサポートされていないよ、ということです。
Quarkus RESTへの移行について、詳しいことはQuarkus公式のドキュメントにも書いてあります

登場人物を整理しておきます。

name artifact id description
RESTEasy Classic quarkus-resteasy 従来のJakarta REST(JAX-RS)仕様の実装
Quarkus REST quarkus-rest 新しいJakarta REST仕様の実装
RESTEasy Reactive quarkus-resteasy-reactive 新しいJakarta REST仕様の実装。 今はQuarkus RESTに名前が変わっている

混在の禁止

RESTEasy ClassicQuarkus RESTの混在が明確に禁止されたのはQuarkus 3.9からです。ちなみにRESTEasy ReactiveQuarkus RESTにリネームされたのもこのタイミングです。

今回のバージョンアップでは3.9をまたいでいるので、禁止に引っかかってエラーが出たんですね。

修正方法

混在しているのがいけないので、その状態を正します。

その時書いていた依存関係(GradleのKotlin DSL)はこうでした。

    implementation("io.quarkus:quarkus-rest-client")
    implementation("io.quarkus:quarkus-rest-client-jackson")
    implementation("io.quarkus:quarkus-resteasy")
    implementation("io.quarkus:quarkus-resteasy-jackson")

quarkus-resteasy系は古いので、「Quarkus RESTへの移行」のドキュメントにも記載されていた通り、新しいquarkus-restに置き換えます。
つまりこうですね。

    implementation("io.quarkus:quarkus-rest-client")
    implementation("io.quarkus:quarkus-rest-client-jackson")
-   implementation("io.quarkus:quarkus-resteasy")
-   implementation("io.quarkus:quarkus-resteasy-jackson")
+   implementation("io.quarkus:quarkus-rest")
+   implementation("io.quarkus:quarkus-rest-jackson")

これで、新しいquarkus-restだけが使われるようになるので、問題解決しました!

それでも直らない場合は?

同じことをやったけど直らないんですが?というケースもあるかもしれません。
私は前述の対応で問題解消できているので、ここからは想像で書くことをお許しください。

考えられるのは、プロジェクトで直接指定している依存関係だけでなく、それに付随して自動的に追加されるライブラリ(つまり間接的に依存しているライブラリ)の中に、古いquarkus-resteasyが含まれている可能性があるということです。

どういうことか、というのは、下記のコマンドでdependenciesのタスクを実行してもらうのが分かりやすいと思います。

sh
$ ./gradlew dependencies --configuration runtimeClasspath

なお、プロジェクトの規模が大きいと依存関係ツリーは膨大になり、見るのが結構大変なので、例えばquarkusあたりでgrepすれば少し楽になるかもしれません。この辺りのキーワードは適宜調整してください。

sh
$ ./gradlew dependencies --configuration runtimeClasspath | grep quarkus

出力された依存関係のツリーの中に、新しいもの(quarkus-restまたはquarkus-resteasy-reactive)と古いもの(quarkus-resteasy)がどちらも存在していたら、やはり混在しているということが確認できます。

そこが確認できれば、どのライブラリがquarkus-resteasyを間接的に引き込んでいるのかを特定し、そのライブラリのバージョンを上げる、もしくは不要なものを削除することで解決できるはずです。

新しいライブラリへの移行の際は、(冒頭で示したドキュメントと同じですが、)「Quarkus RESTへの移行」も参考にしてみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?