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
のまま変わらないという問題が起きたってわけ。
検索で出てきた解決策
- Microsoftのドキュメントにある通り
MAVEN_OPTS
環境変数を定義- 効果なし
- Intellij IDEAの
設定>ビルド、実行、デプロイ>ビルドツール>Maven
のローカルレポジトリの値の変更- Gradleはこの設定を参照しなかったんでダメ
- 環境変数
GRADLE_OPTS
を定義- Gradle daemonのガイドによるとGradle daemonを利用したタスク実行はGRADLE_OPTSを使わないらしい
結局
こいつによると$GRADLE_USER_HOME/gradle.properties
にorg.gradle.jvmargs
を定義するとGradle daemonを利用したタスク実行であってもjvm引数を指定できるらしいってわけ。
多分プロジェクトごとに設定したいならプロジェクトのgradle.properties
に記述すればいいんじゃないかな。
この結果を得るまで実二日ネットを彷徨ったんで苦しんでいる他の人のために忘備録として記事を作成しておくってわけ。
ちなみにgradle.properties
に直接maven.repo.local=/path/to/your/repository
を書いても利用されない。Gradle daemonの弊害か。Gradleに詳しい人おしえて。
Discussion