专栏首页容器计算sbt 项目导入问题

sbt 项目导入问题

文章目录

1 Overview

有用过 sbt 开发项目的同学应该都有这样的体会,换个环境,sbt 经常会出现编译项目出错的情况,导入 IDEA 又各种报错,尤其是在 github 上找到一个 sbt 编译的项目,想 clone 下来导入 IDEA 中阅读源码,跑跑测试用例,debug 进去看看实现原理等等…

总之一句话,sbt 的项目很麻烦,甚至是见到 sbt 的项目就想躲。

2 问题分析

其实以上的情况是笔者之前经常遇到的问题,所以下定决定花点时间解决这个问题。

首先要明白 sbt 其实是一个 Scala 或者 Java 的一个构建工具,使用上的目的和方式其实跟 Maven 是大相径庭的,如果你是 Maven 的老司机,要解决 sbt 的问题,应该不难。

2.1 sbt 本地问题

其实只要 sbt 在本地可以对项目进行构建,就应该不存在 IDEA 构建不了的问题。所以正常的下载安装 sbt 的流程应该是这样的。

  1. 官网 下载对应的版本,对于新手建议直接安装 1.0.0 以上的版本,原因是 0.13 及以上的版本 sbt 团队应该不再维护,而且新版本应该是向上兼容的。
  2. 下载后,解压到自己的软件安装路径上,例如我的,/usr/local/sbt,然后设置环境变量。
  3. 确认一下 sbt 配置(这个后面会细说)。

关于第三点,这里详细解释一下,正常来说 sbt 安装目录应该是以下这样的。

➜  sbt tree
.
├── bin
│   ├── java9-rt-export.jar
│   ├── sbt
│   ├── sbt-launch-lib.bash
│   ├── sbt-launch.jar
│   └── sbt.bat
├── conf
│   ├── sbtconfig.txt
│   └── sbtopts
└── lib
    └── local-preloaded
    // 这里不详细列出来了

跟 Maven 一样,sbt 有个叫 sbtconfig.txt 的文件,看文件名就知道,这个是 sbt 的配置文件。这个文件初始的样子是这样的。

# Set the java args to high

-Xmx512M

-XX:MaxPermSize=256m

-XX:ReservedCodeCacheSize=128m

# Set the extra SBT options

-Dsbt.log.format=true

# 这是我自己添加的
-Dsbt.repository.config=/usr/local/sbt/conf/repositories

注意最后一行的参数是笔者添加的,这里是告诉 sbt,jar 包和 sbt 插件的仓库地址,这里跟 Maven 也是一样的,可以给 sbt 添加阿里云镜像或者其他仓库。这里看看这个文件的具体内容。

[repositories]
local
maven-central
nexus-aliyun:http://maven.aliyun.com/nexus/content/groups/public
sbt-plugins-repo: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

以上的仓库基本够用(至少笔者是够用的),如果还需要其他仓库(公司仓库),可以自行添加。更多 sbt 配置参数可以参考官方文档。这里需要提示,当用命令行构建项目的时候,上述参数应该是这样的格式 -Dprop=value,以下是我构建项目的时候,输入命令的一个例子。

sbt -Dsbt.override.build.repos=true -Dsbt.repository.config=/usr/local/sbt/conf/repositories

另外还需要注意的一点是,sbt 很多插件没有发布到中央仓库,阿里云镜像也没有去同步这些插件仓库,如果你不配置上述文件的 sbt-plugins-repo 的仓库地址,基本上就不要指望可以构建项目成功了,这个也是 sbt 项目比较坑的一个地方。关于这些插件仓库,地址其实已经不是上述文件那样了,只是他会自动跳转到目前的域名,因为这些仓库已经走商业化模式了,所以原来的仓库会有一定的限制,需要留意一下。

2.2 IDEA sbt 的配置问题

如果在本地都能构建项目成功,那么在 IDEA 中也应该成功,因为 IDEA 是支持 sbt 项目的。但这里会有一些坑需要注意一下的。

不管是导入还是创建新的 sbt 项目,都应该检查一下 IDEA 的 sbt 配置,这里以笔者的配置为例。

注意需要留意的是 sbt-lauch.jar,如果不配置,那么用的是 IDEA 的内置的 sbt,为了更灵活的配置 sbt 的一些设置,建议还是使用自己下载安装的 sbt,并且设置 VM 参数,原理等同于上节说的命令行模式的参数。这里就不多做解释了,官网是有专门介绍的。

2.3 一些测试

为了测试 sbt 的配置是否正确了,建议利用 IDEA 创建和导入一个 sbt 项目,尤其是导入一个开源的 sbt 项目,因为这些项目相对比较复杂,sbt 的配置文件中包含了大量的插件和 jar 包,如果可以一次构建成功,那么 sbt 的配置就应该是没有问题了,以后如果碰到问题了,就仔细阅读错误日志,其实最多的问题就是仓库配置不对,导入插件和 jar 无法下载,最终导入构建失败。

3 Summary

本文主要介绍了 sbt 的配置和踩坑经历,碰到 sbt 构建失败不要轻易放弃,毕竟 sbt 的动态编译还是很爽的…

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Delta Lake 学习笔记(一)

    今天 Spark + AI Summit 2019 宣布开源了 Delta Lake 这个项目,关于这个项目的背景我就不赘述了,砖厂官网有很多介绍,包括项目的 ...

    runzhliu
  • 【Spark Operator】集成Airflow

    我们的任务流调度是采用 Airflow,画出 DAG 之后再按序执行,其中 Etcd 是我们很重要的组件,所以封装出一个 Airflow 的 Etcd Oper...

    runzhliu
  • 推荐系统浅谈

    通过将内容 (生产方) 与用户 (消费方) 进行匹配, 提供符合不同消费方各自偏好的内容, 在不同业务方的知识体系中可能会被称为: 智能分发, 个性化推荐, 千...

    runzhliu
  • centos 安装sbt

    1.yum install sbt 2.如果不行,则 curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rp...

    hbbliyong
  • SBT 常用开发技巧

    SBT 一直以来都是 Scala 开发者不可言说的痛,最主要的原因就是官方文档维护质量较差,没有经过系统的、循序渐进式的整理,导致初学者入门门槛较高。虽然也有其...

    joymufeng
  • Delta Lake 学习笔记(一)

    今天 Spark + AI Summit 2019 宣布开源了 Delta Lake 这个项目,关于这个项目的背景我就不赘述了,砖厂官网有很多介绍,包括项目的 ...

    runzhliu
  • spark开发环境详细教程2:window下sbt库的设置

    问题导读 1.sbt在IntelliJ IDEA里面比较慢,该如何解决? 2.如何在window里面更改阿里源? 3.如何在Linux里更改源? 上一篇...

    用户1410343
  • Spark安装之问题

    SparkSQL context 在执行sql语句时,现在使用spark.sql()替换sqlContext.sal()

    ZONGLYN
  • 2020-08-29:进程线程的区别,除了包含关系之外的一些区别,底层详细信息?

    进程:进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段。

    福大大架构师每日一题
  • 从源码来看ReentrantLock和ReentrantReadWriteLock ReentrantLockReentrantReadWriteLock

    上一篇花了点时间将同步器看了一下,心中对锁的概念更加明确了一点,知道我们所使用到的锁是怎么样获取同步状态的,我们也写了一个自定义同步组件Mutex,讲到了它其实...

    MindMrWang

扫码关注云+社区

领取腾讯云代金券