メインコンテンツへスキップ

wire-gradle-pluginを動かす

wire-gradle-pluginを使う際にセットアップで躓いたのでメモです。

※2020.11.15追記※
#

wireのほうでドキュメントの更新がありました。 以下のPRの内容を参考にセットアップするのが良さそうです。

github.com

この記事では、このPRが出る前時点で私個人で検証したセットアップ方法について記述しています。

Wireとは
#

Protocol Buffersの.protoファイルからKotlinやJavaのコードを生成したりするためのライブラリです。ドキュメントに記載がありますが、AndroidやJava向けに開発されています。(2020.09にProto3を正式にサポートしています。)

※(こちらのプラグインは過去のもので、今はDeprecatedになっていますのでご注意を。)

wire-gradle-pluginとは
#

Wireライブラリにある子ライブラリのようなものです。Gradleプラグインとして利用できます。 github.com

ProtoファイルからKotlinやJavaのコードをコンパイルするためにWireライブラリの中にあるCompilerを使うだけであれば、Gradle Pluginでの設定が楽というような記述があります。今回はprotoからKotlinコードの生成がしたかっただけなので、この方法でセットアップを試みました。

が、うまくいきませんでした。

どうやらPlugin idが見つからないエラーが出ているようでした。

Plugin [id: 'com.squareup.wire', version: 'xxx'] was not found in any of the following sources:```

## 原因

確実ではないですが、どうやらここらへんのようです:

- [Add plugin to the Gradle Plugin Repo · Issue #1828 · square/wire · GitHub](https://github.com/square/wire/issues/1828)

- [Unable to use wire-gradle-plugin:3.5.0 using Gradle Kotlin DSL? · Issue #1848 · square/wire · GitHub](https://github.com/square/wire/issues/1848#issuecomment-724924554)

## 解決策

上記のIssueにも記載されていますがsettings.gradle / settings.gradle.ktsあたりに設定を加えます

// https://github.com/square/wire/issues/1029#issuecomment-540152640 pluginManagement { resolutionStrategy { eachPlugin { if (requested.id.id == ‘com.squareup.wire’) { useModule(“com.squareup.wire:wire-gradle-plugin:${requested.version}”) } } } }


上記の設定を入れることで解決できました。
根本原因が解決されれば、この設定も不要になると思います。