我们为什么放弃SBT回归Maven

显然,我是在说Scala项目。在我们讨论这个话题时,SBT的稳定版本是0.13,我想再过几年,本文提及的问题会一一得到解决,从而让SBT成为一个真正成熟强大的构建工具。

在我们目前开发的系统中,有一个基于AKKA的组件,使用Scala语言进行编程。绝大多数情况下,构建Scala项目首选的工具是SBT,作为新一代的构建工具,SBT吸收了众多前辈的优点,简单易用,能够满足基本的应用场景。

但是SBT确实还不够完善和强大,在实际的项目构建中,当面临一些相对复杂的场景时,会显得比较无力。其中最为我们不能接受的是面向多环境的构建。尽管社区提出过一些解决方案,例如http://stackoverflow.com/questions/17193795/how-to-add-environment-profile-config-to-sbt , 但是这个方案的缺陷在于对于每一套环境都要提供全套的配置,即是它们在多数据环境中的值是一样的。实际上这个问题的本质原因是SBT尚没有类似Maven那样在构建时基于某个配置文件对一些变量进行过滤和替换的Resource+Profile功能,这是很重要的一个需求。

就打包方面,我指的是构建一个包含命令行工具、配置文件和各种Lib的安装包,SBT的sbt-native-packager确实非常强大,令人影响深刻。同样,在面向不同环境的前提下,打包不同用途的package时,sbt-native-packager的灵活性还有待检验。例如,基于我们过去的最佳实践,面向每一种环境,我们尝尝会利用maven-assembly-plugin构建两种package,一种是包含全部产出物的标准部署包,一种是仅仅包含每次构建都有可能发生变化的文件,例如项目自身的jar包和一些配置文件,我们把这种包称为最小化的package,这种package会用于日常的持续集成的部署,它的体积很小,在网络带宽有限的环境里,它会大大节约部署时间。在这方面,我不能确定sbt-native-packager能否完美实现,因为在遇到前文提及的问题时我们已经放弃了对sbt-native-packager更深入的研究,这里提出打包问题,也是在分享我们的最佳实践。

回到Maven,我必须承认我是Maven的忠实拥趸,在过去数年的开发工作中,Maven满足了我们各式各样的构建需求,从没有让我们失望过,它的约定大于配置的思想和丰富的周边插件真正实践了:Make simple things simple, complex things possible!

即便如此,在我刚刚开始我的Scala编程之路时,我还是坚定地拥抱了SBT,社区基于Scala的开源项目也多是基于SBT构建的。但是当一个项目进入真正的开发流程时,SBT表现的还不够强大,对比Maven上的种种最佳实践,不由得让我们回归Maven,但是这并不代表我们会在Maven上停滞不前,实际上我们对SBT抱有很大的期望,只是它需要时间变得更加强大。在未来某个合适的时机,我想我们会再次回归SBT。

本文原文出处: http://blog.csdn.net/bluishglc/article/details/57890873 转载请注明出处。

时间: 2024-10-03 14:55:30

我们为什么放弃SBT回归Maven的相关文章

关于大数据领域各个组件打包部署到集群运行的总结(含手动和maven)(博主推荐)

对于这里的打包,总结: (1)     最简单的,也是为了适应公司里,还是要用maven,当然spark那边sbt,maven都可以.但是maven居多. Eclipse/MyEclipse下如何Maven管理多个Mapreduce程序?(企业级水平) IDEA里如何多种方式打jar包,然后上传到集群 Spark编程环境搭建(基于Intellij IDEA的Ultimate版本)(包含Java和Scala版的WordCount)(博主强烈推荐) (2)     将整个项目打jar包进去,只需指定

maven+scala+idea 环境构建

组建信息 组件 版本 下载地址 maven 3.6.1 https://maven.apache.org/ jdk jdk1.8.0 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Scala 2.11.7 https://www.scala-lang.org/download/all.html IDEA 最新版本 http://www.jetbrains.com/idea/

scala范函编程是怎样被选中的

现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求:无论处理器变得能跑多快,都无法满足软件对计算能力的需要.按照摩尔定律(Moore's Law)处理器(CPU)每平方面积上包含的半导体晶体管数量每18个月将会增加一倍.发展到现在,所有CPU厂商都再也无法按照摩尔定律在一定面积上成倍增加半导体了,大家也都只能朝着增加CPU内核数量上努力了.多核CPU已然成为现代计算机技术发展趋势.现代软件对计算能力的需求暴增主要归咎于现代社会中数据应用的普及和泛滥.这种数据量级单凭增加处理器和存储

《时间投资法》读书笔记

<时间投资法>胜间和代 推荐:5星 阅读时间:3-4小时: 时间管理的关键并不在于提高要做的事的效率,而在于确定不该做的事. 时间管理的书籍也阅读了一些,本书给了我一些新鲜的观点: 1.首先是时间投资的概念,之前接触到的书,谈的都是时间管理,如何有效的管理时间,提高生产效率,而本书却将时间视作一种资产,用于投资.全书灌输的一种观念也正是投资,如何投资时间,才能使收益最大化.因为有了投资的概念,在做任何事之前,就有一个收益规划比,比如要进行一次家庭清洁大扫除,首先会核算这一天的时间成本,按个人的

【Spark 深入学习 -09】Spark生态组件及Master节点HA

----本节内容------- 1.Spark背景介绍 2.Spark是什么 3.Spark有什么 4.Spark部署 4.1.Spark部署的2方面 4.2.Spark编译 4.3.Spark Standalone部署 4.4.Standalone HA配置 4.5.伪分布式部署 5.Spark任务提交 5.1.Spark-shell 5.2.Spark-submit 6.参考资料 --------------------- 1.Spark背景介绍 Spark是AMLab实验室贡献出的代码,是

在 Azure HDInsight 中安装和使用 Spark

Spark本身用Scala语言编写,运行于Java虚拟机(JVM).只要在安装了Java 6以上版本的便携式计算机或者集群上都可以运行spark.如果您想使用Python API需要安装Python解释器(2.6或者更高版本),请注意Spark暂不支持Python 3. 下载Spark 首先下载Spark并解压,我们从下载预编译版本的Spark开始.在浏览器中访问 http://spark.apache.org/down loads.html 选择"Pre-built for Hadoop 2.

Spark 应用程序部署工具spark-submit

1. 简介 Spark的bin目录中的spark-submit脚本用于启动集群上的应用程序. 可以通过统一的接口使用Spark所有支持的集群管理器,因此不必为每个集群管理器专门配置你的应用程序(It can use all of Spark's supported cluster managers through a uniform interface so you don't have to configure your application specially for each one).

搭建Spark的单机版集群

一.创建用户 # useradd spark # passwd spark 二.下载软件 JDK,Scala,SBT,Maven 版本信息如下: JDK jdk-7u79-linux-x64.gz Scala scala-2.10.5.tgz SBT sbt-0.13.7.zip Maven apache-maven-3.2.5-bin.tar.gz 注意:如果只是安装Spark环境,则只需JDK和Scala即可,SBT和Maven是为了后续的源码编译. 三.解压上述文件并进行环境变量配置 #

Spark Submit提交应用程序

英文标题:Submitting Applications 英文原址:http://spark.apache.org/docs/latest/submitting-applications.html Spark Version:1.3.0 Spark根目录的bin目录下spark-submit脚本用于在集群上启动应用程序,它通过统一接口使用Spark所支持的所有集群管理器,因此无需特殊配置每一个应用程序. 1,绑定应用程序依赖 如果代码依赖于其它项目,为了将代码分发到Spark集群,就需要将这些依