用SBT替代Maven做自动构建

来源:互联网 发布:php建行支付接口demo 编辑:程序博客网 时间:2024/06/05 21:54

BT的全称是simple build tool,是Scala事实上的标准构建工具,当然也支持Scala和Java混合工程的构建,地址在 https://github.com/harrah/xsbt 。

比较遗憾的是,它的官方文档对于新手来说,显得晦涩难懂了些,中文资料就更少了。最近笔者陆续花了些时间,以替代现有Java Web工程的Maven构建为目的,完成了最基本的 build.sbt 编写,并集成到Jenkins中,在这里做个阶段小结,如果你要的仅仅是快速上手,希望本文能够对你有所帮助。

首先要知道的是,SBT使用与Maven一样的默认路径,核心配置文件和pom.xml一样放在base目录,名为build.sbt。这个文件的内容是一系列的对于构建工程的定义,比如名称、版本、依赖等设置。每个设置项之间以空行分隔。同时,在base目录还多出一个project子目录,我们可以往里面添加额外的定义,比如插件(plugins.sbt),这个子目录还作为SBT的临时目录或者说工作目录。另外,除了.sbt文件,我们也可以添加.scala文件,以Scala语法来描述要求更精细控制的构建逻辑,比如定义新的变量、新的方法等等。

如果现有Java Web工程使用pom.xml定义资源库和第三方依赖,那么替换成SBT,除了安装(Unix和Linux可以用各发行版自己的包管理工具安装,Windows有msi安装包可以用)之外,只需要对该工程做如下两处修改:

1- 增加project目录,添加plugins.sbt文件,内容如下

libraryDependencies <+= sbtVersion(v => v match {
  case "0.11.0" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.0-0.2.8"
  case "0.11.1" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.1-0.2.10"
  case "0.11.2" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.2-0.2.11"
  case "0.11.3" => "com.github.siasia" %% "xsbt-web-plugin" % "0.11.3-0.2.11.1"
})

2- 添加build.sbt文件,内容如下

externalPom()

name := "mds"

version := "1.0"

organization := "me.laogao"

crossPath := false

autoScalaLibrary := false

javacOptions ++= Seq("-source", "1.6", "-encoding", "UTF-8", "-target", "1.6")

seq(warSettings :_*) 

接下来,打开命令行窗口,键入sbt回车,即可进入SBT的shell,可以在这里敲各种SBT命令,比如clean、compile、package等等,或者直接sbt clean compile跳过shell,熟悉Maven的朋友应该对这些命令不陌生吧?

稍微解释以下这两个配置文件的内容:

  • plugins.sbt主要定义一个xsbt-web-plugin插件,用于打包成.war而不是默认的.jar。
  • build.sbt主要定义名称、版本、编译参数等等,其中值得一说的有两点:externalPom()用于读取现有pom.xml,seq(warSettings :_*)用于加载xsbt-web-plugin插件的.war打包设置。

假如你想完全绕开pom.xml自己定义依赖(dependencies)和仓库(repositories),只需要在build.sbt中加入如下两组配置(示例):

libraryDependencies ++= Seq(
  "javax.ws.rs" % "jsr311-api" % "1.1.1" % "provided",
  "org.glassfish" % "javax.ejb" % "3.0.1" % "provided",
  "org.eclipse.persistence" % "javax.persistence" % "2.0.0" % "provided",
  "org.codehaus.jackson" % "jackson-core-lgpl" % "1.9.2",
  "org.codehaus.jackson" % "jackson-mapper-lgpl" % "1.9.2"
)

resolvers ++= Seq( 
  "Primefaces" at "http://repository.primefaces.org", 
  "local-repo" at "http://127.0.0.1:8080/nexus/content/groups/public" 

libraryDependencies和resolvers分别对应pom.xml中的dependencies和repositories,++=表示追加,Seq(…)是Scala中序列的构造器。是不是很直观很简洁呢?

接下来就是在Jenkins中配置sbt插件并加入相应工程了,过程很直接,步骤如下:

  1. 将SBT自带的sbt-launch.jar复制到Jenkins服务器能访问到的目录中;
  2. 在Jenkins主页找到Manage Jenkins > Manage Plugins -> sbt,安装启用;
  3. 在Jenkins主页找到Manage Jenkins > Configure System -> sbt,Name和Path分别输入 sbt-launch.jar 和完整路径,保存;
  4. 找到需要的project,选择Configure > Add build step,选sbt,选择刚才配好的sbt-launch.jar,JVM Flags 填 -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256m -Xmx512M -Xss16M ,action用 package 表示执行打包动作(隐含了更新编译等);
  5. Build Now

好了,正如你看到的,SBT其实并不难理解,配置也很简单清晰。有了这个打底,我们不再需要维护冗长的pom定义,有什么依赖一望便知,构建Scala和Java混合工程也不再是个需要专门关注的体力活。

转载:http://laogao.me/blog/2012/07/01/sbt-maven/

0 0
原创粉丝点击