IntelliJ Platform Pluginの開発をする中で、ローカルマシンのファイルパスなど、開発環境にある公開したくない情報を定義したくなりました。
ただ、どのようにすればよいのか分からなかったため、調べたときのメモを残します。
目次
環境
- プラグインの開発環境
調査
IntelliJ Platform Pluginのビルドでは Gradle を使っています。 Gradle IntelliJ Plugin | IntelliJ Platform Plugin SDK
ただ、IntelliJ Platform Pluginの公式ドキュメントでは、どのようにすればよいか記載が見当たりませんでした。
そのため、他にもGradleを使っているものがないかを調べたところ、AndroidのビルドでもGradleを使っていることが分かりました。
では、Androidではどのように設定しているかを調べたところ、多くの記事で local.properties
を使っていました。
そこで、以下の記事を参考に、IntelliJ Platform Plugin開発でも local.properties
を使ってみます。
android - Read value from local.properties via Kotlin DSL - Stack Overflow
実装
今回は runIde
の ideDir
に対して、 local.properties
で定義した値を設定してみます。
build.gradle.kts の修正
まずはファイルの先頭あたりで、 local.properties
をロードします。
なお、 local.properties
ファイルが無くてもエラーにならないよう、ファイルの存在チェックも行っています。
import java.io.FileInputStream import java.util.* // load local.properties val localPropertiesFileExists = File(rootProject.rootDir, "local.properties").exists() val prop = if (localPropertiesFileExists) Properties().apply { load(FileInputStream(File(rootProject.rootDir, "local.properties"))) } else null
続いて、runIde
の設定を変更します。
ちなみに、 ideDir
は設定する値に Property<File>
な型を要求することから、 file()
を使っています。
runIde { // executable other IDE if (prop != null) { val d = prop.getProperty("ideDir") if (d.isNotEmpty()) { // written by Kotlin ideDir.set(file(prop.getProperty("ideDir"))) // written by Groovy // ideDir = file(file(prop.getProperty("ideDir"))) } }
local.propertiesの作成
続いて、 local.properties
ファイルを作成します。
今回定義する ideDir
には、起動対象のIDEが存在するファイルパスを指定します。
今のところWindowsで開発しているため、 \
をエスケープした以下のような値を設定します。
ideDir = C:\\Users\\<UserName>\\AppData\\Local\\JetBrains\\Toolbox\\apps\\RubyMine\\<ch-n>\\232.10300.41
以上で設定は完了です。
動作確認
Run Plugin
したところ、NotificationToolWindow
を含む自作のプラグインがRubyMine 2023.2.6 で起動しました。
local.properties
の値が読み込めているようです。
ソースコード
Githubにあげました。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin
今回のプルリクはこちら。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin/pull/19
なお、今までのプルリクではGithub Actionsがエラーになっていましたが、今回のプルリクからは成功しています。