加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

SBT对于非Scala程序员有指导吗?

发布时间:2020-12-16 09:42:16 所属栏目:安全 来源:网络整理
导读:有一天,我想学习Scala。我所看到的那些喜欢它的人的语言是非常令人鼓舞的。 今天呢,不是那一天。今天,我想对我的团队的构建文件进行一些修改。不幸的是,这个构建文件与SBT放在一起,几乎不可理解。 我的主要问题是,在我看来,SBT引入了一些大量的新操作
有一天,我想学习Scala。我所看到的那些喜欢它的人的语言是非常令人鼓舞的。

今天呢,不是那一天。今天,我想对我的团队的构建文件进行一些修改。不幸的是,这个构建文件与SBT放在一起,几乎不可理解。

我的主要问题是,在我看来,SBT引入了一些大量的新操作符,它们用字符串和列表来创建某种类型的sbt对象。例如,在sbt:

"args4j" % "args4j" % "2.0.12"

显然实际上是定义的;然而,我甚至不能告诉什么类型是在scala复制,因为在复制我得到明智的错误:

scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
       val tstcrap = "args4j" % "args4j" % "2.0.12"

即使设置了类路径以包含sbt-launch.jar文件并进行导入sbt._,我也收到此错误。

同样,我正在处理像这样的东西:

val jarSources = (descendents(classesOutput ##,"*") ---
                  assemblyExclude(classesOutput ##))

什么是##运算符,这是做什么,更重要的是这个表达式的类型是什么?所有这些新的操作符都记录在某个地方,有没有办法获得使用与sbt构建文件中使用的语言相同的scala repl?

看这个sbt文件提醒我尝试解密perl,而不用阅读任何相关的手册页。 (不推荐的活动)

更新:在下面的答案中查看链接,并查看标签为sbt的其他问题和答案后,我遇到了我缺少的大部分scala知识:scala允许定义将被调用的隐式转换方法得到解决。在这种情况下,sbt定义ManagedProject trait内部的一个隐式转换,从String到private类sbt.GroupID,以便

"a" % "b"

真的是这样的

(new GroupID("a")) % "b"

我想象隐含转换的解决方案和其他规则必须变得非常复杂;这几乎让我想起了在通过非成员函数完成时,可以在C中引入操作符重载的恶梦。

解决方法

由于SBT构建文件是一个完整的Scala源文件,并且依赖于SBT本身提供的一些库,因此很难覆盖SBT,而不依赖于对Scala的熟悉程度。我不知道这样的指导。

对于您提出的具体问题,我认为这些wiki页面将有助于:

>字符串的运算符:http://code.google.com/p/simple-build-tool/wiki/LibraryManagement
> ##和—运算符:http://code.google.com/p/simple-build-tool/wiki/Paths

如果要使用SBT库运行Scala REPL,请尝试:

$ sbt console-project

其他一些有用的命令列在http://code.google.com/p/simple-build-tool/wiki/RunningSbt。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读