如何在IntelliJ IDEA中执行activator publishLocal任务及跨项目代码共享
嘿,我来帮你搞定这两个问题——先说说怎么在IntelliJ IDEA里执行activator publishLocal,再聊聊不用发布就能跨项目共享代码的更省心方案:
一、在IDEA中执行
activator publishLocal任务 这里要划个重点:Activator本质就是SBT的包装工具,activator publishLocal和sbt publishLocal的效果完全一样,都是把构件推到本地的Ivy/Maven仓库(默认是~/.ivy2/local)。所以你根本不用特意找“Activator任务”,直接用IDEA的SBT任务功能就能搞定:
- 点击右上角运行按钮旁边的下拉框,选「Edit Configurations...」打开配置面板
- 点左上角的「+」,选「SBT Task」
- 在「Tasks」输入框里直接填
publishLocal,再选好对应的项目(多项目构建的话),点「OK」保存 - 之后直接点运行按钮,就能执行和
activator publishLocal完全一样的操作了
如果你确实需要跑原生Activator命令或者自定义脚本,也可以这么弄:
- 同样打开「Run/Debug Configurations」,选「+」里的「Shell Script」
- 在「Script path」里填Activator的可执行文件路径(Windows是
activator.bat,Mac/Linux是./activator) - 「Script parameters」里填
publishLocal,再把工作目录设为你的项目根目录,保存后就能运行了
另外,最直接的方式就是用IDEA底部的「Terminal」标签页,直接在项目根目录敲activator publishLocal命令,临时执行超方便。
二、无需发布即可跨项目共享代码的更佳方案
频繁跑publishLocal确实挺烦的,尤其是代码改得勤的时候,下面几种方案能让你彻底摆脱这个操作:
1. 把项目整合为IDEA子模块
这是最直观的方式:
- 打开主项目,通过「File」→「New」→「Module from Existing Sources...」把其他需要共享的项目导入进来
- 打开「File」→「Project Structure...」,给依赖项目添加对共享模块的依赖
- 之后修改共享项目的代码,依赖它的项目会自动同步编译结果,完全不用发布
2. 使用SBT多项目构建
如果你的项目都是基于SBT的,强烈推荐把它们放到同一个SBT构建里:
- 在根目录创建
build.sbt,定义子项目,比如:
// 共享代码的子项目 lazy val shared = project.in(file("shared")) // 依赖共享项目的应用项目 lazy val app = project.in(file("app")).dependsOn(shared)
- 把原来的项目分别放到
shared和app目录下,然后在IDEA导入整个根项目 - 这样SBT会自动处理项目间的依赖,修改
shared的代码后,app会自动触发重新编译,连手动编译都省了,还能加aggregate(shared)让执行app的任务时自动跑shared的对应任务(比如compile)
3. SBT本地项目依赖(跨独立SBT项目)
如果不想把项目合并到一个构建里,也可以在SBT里直接依赖本地未发布的项目:
- 在当前项目的
build.sbt里加这么一段:
// 引用本地的另一个SBT项目,路径和项目ID要对应 lazy val anotherProject = ProjectRef(file("../path-to-your-project"), "your-project-id") // 当前项目依赖这个本地项目 lazy val currentProject = project.dependsOn(anotherProject)
- 这里的
your-project-id是目标项目build.sbt里定义的项目ID - 之后SBT会直接从本地目录拉取代码编译,修改目标项目代码后,当前项目重新编译就会用最新版本,完全不用
publishLocal
4. IDEA库依赖(临时方案)
如果只是临时共享代码,也可以直接把另一个项目的编译输出目录当库用:
- 打开「Project Structure...」→「Libraries」→「+」→「Java」
- 选目标项目的
target/scala-x.x/classes(或target/classes)目录 - 给当前项目加这个库的依赖,但这种方式不如模块依赖灵活,适合临时测试
总的来说,优先选SBT多项目构建或者IDEA子模块,这俩是日常开发里最省心的代码共享方案,能彻底告别反复发布的麻烦。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

