idea中导入sbt多模块项目遇到的问题解决方案

     在《Akka入门与实践》一书第二章-----Actor与并发,作者使用了两个项目,一个是服务端,一个是客户端,而客户端要依赖服务端,所以客户端算是一个多模块项目,整个项目都是用sbt工具构建的。这有点类似于maven多模块项目,一个maven项目要依赖另一个maven项目,那首先要将被依赖的maven项目安装到本地仓库(例如mvn  install);sbt项目也是如此,不过有几个问题需要注意:

     1.sbt项目发布到本地的命令

     如果你按照书上的例子一步一步做,你会发现在第59页书上给的命令是在项目根目录下: $activator  publish-local   ,如果你是windows系统,那么使用这个命令等待一段漫长的时间所需要的依赖下载完之后就会报错,说这个命令不合法,windows上对应的正确命令是:$activator  publishLocal   

    因为akka项目的主要组件包就是Typesafe Activator的sdk,不过现在官网改域名了,你输入typesafe.com会跳转到lightbend.com,最新的域名上找不到旧版本的activator下载,而书上用的是1.2.12版本,所以我在这里把链接放出来,以供想下载较老版本的activator:http://downloads.typesafe.com/typesafe-activator/1.2.12/typesafe-activator-1.2.12.zip

如果你想下载其他版本号,只要将上述连接中数字改成你想要下载的版本号就行(例如将上述链接中两个地方的1.2.12改成1.2.13,就会下载1.2.13版本了,前提是存在这个版本号才行)。

     而activator主要是用scala语言编写的,所以自然而然的activator就会使用sbt构建工具来编译项目,言归正传,来说遇到的几个问题


     2.sbt项目发布方式

     activator组件包一般比较大(大概3到4百兆),所以我下载后解压到了D盘,而sbt工具使用的是ivy仓库,光解压到D盘不行,因为activator默认去${user.home}即C盘用户目录下寻找sbt路径和ivy路径,将activator-launch-1.2.12.jar反编译:

idea中导入sbt多模块项目遇到的问题解决方案

   

      在我的上一篇博客中,介绍了如何在本地安装sbt工具,并自定义配置sbt的依赖仓库ivy路径以及其他配置,并将idea中的sbt插件关联上本地配置。但是如果你按照书上在项目根目录下使用  activator命令发布项目的话,activator命令默认是去C盘用户目录下去构建的,由于我sbt安装在D盘,所以activator没在C盘用户目录下找到sbt路径,就会再重新下载sbt安装一遍,并且还会创建ivy目录存放依赖,这就造成资源重复浪费空间。所以有两种解决方案:

     (1)配置activator的属性文件,将SBT_OPTS 设为本地sbt路径,查看activator文件夹下的activator.bat文件可发现:

idea中导入sbt多模块项目遇到的问题解决方案

如果没设置过SBT_OPTS配置,那就会认为是没有,就会在C盘下重新安装,所以要配置一下,例如:

$activator  publishLocal  -DSBT_OPTS=你的sbt路径 ,也可写到一个文件中,

参考这篇博客https://blog.csdn.net/pzw_0612/article/details/46702961,不过我不推荐这个方法(即配置activator的属性),推荐使用接下来要介绍的第二种方法。

     (2)既然我们已经在idea中将sbt关联到本地sbt配置了,那么就可以像使用maven插件那样来发布项目:

idea中导入sbt多模块项目遇到的问题解决方案


我们已经安装过scala插件,所以项目能自动被识别为sbt项目,点击右边那个“sbt”按钮,在展开的列表中选择“sbt tasks”栏目下的publishLocal,“sbt  tasks”这个栏目主要是管理sbt项目的生命周期;双击publishLocal命令,然后等待几秒,控制台(sbt  shell)会显示正在发布直到成功。上一篇博客中将sbt安装在D盘,并且设置ivy目录在sbt根目录下,所以这次发布也会安装到D盘的sbt目录下,正好达成我们的要求。

      再导入多模块项目时,就会在本地ivy仓库找到刚才发布的,多模块项目也导入成功。