为Kotlin脚本定制的.m2目录
我正在使用带有 @file:Repository 和 @file:DependsOn 的Kotlin脚本文件来添加依赖。
默认情况下,当脚本运行时,依赖会缓存在 ~/.m2。
在我的CI环境中,我想使用一个不同的缓存位置,例如:
project-root/.m2
以便在后续的CI步骤中对其进行持久化并复用。
如何将Kotlin脚本配置为使用自定义的本地Maven仓库/缓存目录,而不是 ~/.m2?
解决方案
似乎没有官方的办法,像 GRADLE_USER_HOME 那样对 ~/.gradle 起作用。且 JAVA_TOOL_OPTIONS: -Dmaven.repo.local=.m2/repository 不起作用,原因是
Kotlin脚本直接使用Eclipse Aether来进行Maven解析,而Aether不会把
maven.repo.local视为系统属性——这是Maven CLI的概念。Aether的本地仓库是由调用代码(Kotlin scripting)以编程方式配置的,它把 ~/.m2/repository硬编码。因此该属性已被设置,但会被忽略。
一个可靠的修复方法是使用符号链接:将 ~/.m2 指向项目相对路径中的 .m2/,这是GitLab CI可以缓存的路径。这样就能拦截Kotlin脚本写入 ~/.m2/ 的任何位置。
因此
mkdir -p .m2
rm -rf ~/.m2
ln -s "$CI_PROJECT_DIR/.m2" ~/.m2
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。