🐘

GradleでMavenのローカルレポジトリをグローバルで変更するのに苦労した話

に公開

結論

$GRADLE_USER_HOME/gradle.propertiesに以下の内容を記述してGradleを同期すればおk

org.gradle.jvmargs=-Dmaven.repo.local=/path/to/your/repository

動機

私はWindowsでDev Driveを使って開発をしてるんです、そこでMavenのローカルレポジトリをDev Driveに移したってわけ。
そんでMicrosoftのドキュメントに書かれているのがこう

Maven キャッシュ (Java): Dev Drive に Maven キャッシュ ディレクトリを作成し (D:\packages\maven など)、グローバル環境変数 MAVEN_OPTS を設定してそのパスに構成設定を追加します (setx /M MAVEN_OPTS "-Dmaven.repo.local=D:\packages\maven" など)。 %USERPROFILE%\.m2\repository の内容をこのディレクトリに移動します (これには、Maven が repository フォルダーにダウンロードしてプロジェクトに使用する依存関係、プラグイン、その他の成果物のみが含まれます)。 詳細については、Maven ドキュメントと StackOverflow の「.m2 フォルダーの代替場所を指定する、または settings.xml を永続的に編集する方法は?」を参照してください。

私もこのように設定して完了!
ってしたんだがこのままでGradleプロジェクトの:publishToMavenLocalタスクでデプロイされる先がデフォルトの~/.m2/repositoryのまま変わらないという問題が起きたってわけ。

検索で出てきた解決策

  1. Microsoftのドキュメントにある通りMAVEN_OPTS環境変数を定義
    • 効果なし
  2. Intellij IDEAの設定>ビルド、実行、デプロイ>ビルドツール>Mavenのローカルレポジトリの値の変更
    • Gradleはこの設定を参照しなかったんでダメ
  3. 環境変数GRADLE_OPTSを定義
    • Gradle daemonのガイドによるとGradle daemonを利用したタスク実行はGRADLE_OPTSを使わないらしい

結局

https://docs.gradle.org/current/userguide/gradle_daemon.html
このガイドを見つけられたおかげで問題を解決できたってわけ。
こいつによると$GRADLE_USER_HOME/gradle.propertiesorg.gradle.jvmargsを定義するとGradle daemonを利用したタスク実行であってもjvm引数を指定できるらしいってわけ。
多分プロジェクトごとに設定したいならプロジェクトのgradle.propertiesに記述すればいいんじゃないかな。
この結果を得るまで実二日ネットを彷徨ったんで苦しんでいる他の人のために忘備録として記事を作成しておくってわけ。
ちなみにgradle.propertiesに直接maven.repo.local=/path/to/your/repositoryを書いても利用されない。Gradle daemonの弊害か。Gradleに詳しい人おしえて。

Discussion