Iganinのブログ

日頃の開発で学んだ知見を中心に記事を書いています。

【Kotlin】InteliJ IDEAでmockk使用時にError during attachment using: net.bytebuddy.agent.ByteBuddyAgentエラーが出た際の対処方法

tl; dr;

  • JDKのpathにwhite spaceが含まれていると、mockkで使用しているByteBuddyがパス解決に失敗する
  • ProjectのJDKのpath設定を変更し、white spaceが含まれないようにすることで解決する
    • JDKを別途ダウンロードするのが良いと思われる

環境

  • macOS Catelina 10.15.7
  • InteliJ IDEA 2021.1.2
  • mockk 1.8.10
  • Java 11

発生する問題

InteliJ IDEAでmockkを使用したテストを作成し、実行した際に Error during attachment using: net.bytebuddy.agent.ByteBuddyAgent$AttachmentProvider$Compound@772ab00fというエラーが発生し失敗してしまう。

対応

エラーメッセージをさらに追っていくと Cannot run program ""/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home/bin/java"": error=2, No such file or directoryというメッセージがあり、JavaのPathの解決に失敗していることがわかる。ただし、パス通りの場所を確認すると問題なくJDKはあることがわかる。

Byte BuddyのIssueを探したところ、下記のIssueが見つかる。 github.com

内容を確認すると、Javaのパス読み込み時にwhite spaceがあると失敗するらしい。例えばInteliJ IDEAの場合は InteliJとIDEAの間にwhite spaceがあるため失敗していると思われる。 ということは、 Android Studioにおいても AndroidStudio Previewのように間にwhite spaceがある場合は失敗するのかもしれない。 Java Versionに依存するのではないかという記載もあり、 Java 11以外だと大丈夫なのかもしれない。 MacOSとタイトルに記載があるのでWindows環境でもおそらく発生しないと思われる。

簡単なワークアラウンドも記載してある。簡単にいうと、InteliJで使用するSDKをInteliJ IDEA内部のものから変更するという内容。

For whom with the same trouble, here's a clean workaround:

Press ⌘ + ; to open Project Structure.
Select + > Download JDK from Platform Settings > SDKs tab.
Download new SDK to some path without whitespaces.
(I recommend ${HOME}/Library/Java/JavaVirtualMachines/)
Congratulations! You've solved the problem.

f:id:Iganin:20210619175113p:plain

上記のJDK home pathにwhite spaceが含まれないようになっていればよい。 実際にワークアラウンドを試したところ、無事mockkを使用したユニットテストを実行することができた。

単純にwhite spaceが含まれなければいいのではないかと思い、InteliJ_IDEAのようにアプリ名を変更することを試みたが、 ランタイムで使用するJavaの設定も変えなければいけないというような内容のエラーメッセージが表示され影響範囲がよめなかったため上記の解決策が良いのだと思う。 ※Project設定のパスを変えてもランタイムで使用する方のJavaのパス設定は InteliJ IDEA表記のままとなっていたため別途設定が必要そう

最後に

原因がわからず解決まで時間を要したので、同じ問題に遭遇した方の時間の節約に貢献できたら幸いです。