zoukankan      html  css  js  c++  java
  • Sbt的使用初步和用sbt插件生成eclipse工程

    以前一直是用maven去管理java项目,现在开始写scala项目了
    但是在scala-ide中去编译scala项目和sbt的区别一直没弄清楚
    受到文章:
    http://my.oschina.net/yjwxh/blog/601566
    的启发,查了相关的资料

    sbt官网是http://www.scala-sbt.org/
    官网的文档对中文特别友好,有中文版本的,但是看了一遍感觉很难接受这么复杂的配置方法
    sbt是一种构建工具,在eclipse-ide中并没有集成
    下载安装msi之后,在默认路径出现了/bin和/conf两个文件夹,添加到path中
    在cmd中运行sbt之后会下载很多的jar包,这点非常不友好,第一次我以为出错了
    第二次,运行了一夜,终于好了。

    第一个小例子:
    新建一个hello文件夹
    新建一个hw.scala文件
    object Hi {
    def main(args: Array[String]) = println("Hi!")
    }
    进入特定的路径
    运行sbt 会在hello文件夹下生成target文件夹
    运行run
    可以得到最简单的helloworld程度的执行

    第一次修改第一个例子:
    hello文件夹中添加一个文件build.sbt
    lazy val root = (project in file(".")).
    settings(
    name:="hello",
    version:="1.0",
    scalaVersion:="2.11.8"
    )
    基本的构建设置都是放在根目录下的这个配置文件里面的
    至少要有的是name 和 version属性
    当然可以指定sbt的版本,在/hello/project/build.properties中输入
    sbt.version=0.13.11
    强制指定使用的sbt的版本,虽然各个sbt的版本兼容,但是官方还是建议指定

    sbt使用的项目的目录是和maven相似的
    构建出来的:编译的classes,打包的jars,托管文件,chches和文档都默认存在在target目录中
    下面是进入sbt之后可以执行的选项
    clean 删除targt目录下的文件
    compile 编译源文件
    test 编译运行所有的测试
    console 进入一个包含classpath的解析器,quit或者ctrl+z退出
    run <参数> 在和sbt所处的同一个虚拟机上执行项目的main class
    package 将resources中文件和scala,java中的class文件打成jar包
    help <命令> 显示帮助
    reload 重新构建

    sbt clean compile "testOnly TestA TestB"
    首先执行清理,然后执行编译,最后是针对的testOnly和它的两个参数
    一个比较高大上的命令就是
    ~compile
    可以在更改源文件的同时自动的运行编译,就是一边改代码,结果就出来了(两个显示器的时候)

    构建定义的三种风格:
    多工程.sbt构建定义
    bare.sbt构建定义
    .scala构建定义

    每个工程都有一些不可变的映射表来描述工程
    map-key
    第二个例子:
    lazy val commonSettings = Seq(
    organization := "com.example",
    version := "0.1.0",
    scalaVersion := "2.11.7"
    )

    lazy val root = (project in file(".")).
    settings(commonSettings: _*).
    settings(
    name := "hello"
    )
    左边的name,version,scalaVersion,都是keys
    一个key是一个SettingKey[T],或者TaskKey[T],或者InputKey[T]的实例
    可以按照java语法设置这些key
    lazy val root = (project in file(".")).
    settings(
    name :=("hello")
    )
    SettingKey[T]:一个key对应着只计算一次的value,加载项目的时候计算,然后一直保存着
    TaskKey[T]:一个key对应着task的value,每次都会重新计算,可能存在潜在的副作用
    InputKey[T]:一个key对应一个可以接收命令行参数的task

    内置的keys:
    内置的keys实际上是对象Keys的字段
    build.sbt会隐式包含import sbt.keys._
    所以可以通过name取到sbt.keys.name
    自定义的keys:
    通过上面的三种方法可以创建自定义的keys
    例如:lazy val hello = taskKey[unit]("一个task示例")
    给一个新的task也就是hello定义一个key
    也就是说除了.sbt之外,cals和defs也可以对工程进行设置,与配置的位置是无关的
    这里的lazy val而不是val可以避免初始化顺序的问题


    添加第三方依赖库有两种方式:
    将jar文件放入lib/中
    在build.sbt中添加依赖
    例子:
    val derby = "org.apache.derby" % "derby" % "10.4.1.3"

    lazy val commonSettings = Seq(
    organization := "com.example",
    version := "0.1.0",
    scalaVersion := "2.11.7"
    )

    lazy val root = (project in file(".")).
    settings(commonSettings: _*).
    settings(
    name := "hello",
    libraryDependencies += derby
    )
    其中的+=好理解
    %方法是用来从字符串构造Ivy模块ID的
    下面的文档描述的就有点复杂了不看了


    https://github.com/typesafehub/sbteclipse
    针对比0.13版本高的sbt可以创建eclipse使用的工程文件目录
    将这个插件用到sbt中有两种方法:
    在~/.sbt/0.13/plugins/plugins.sbt中配置
    在项目目录下去配置:project_dir/project/plugins.sbt
    对最新版的配置的语法是:
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
    然后在命令行使用eclipse命令就可以生成一个目录结构,可以作为eclipse工程导入
    例如:新建如下的目录结构
    PS D:javaweb_workspaceSCALAsbt_eclipse_test> tree /f .
    D:JAVAWEB_WORKSPACESCALASBT_ECLIPSE_TEST
    │ build.sbt

    └─project
    plugins.sbt
    PS D:javaweb_workspaceSCALAsbt_eclipse_test> sbt
    Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
    [info] Loading global plugins from C:Userskongchung.sbt.13plugins
    [info] Loading project definition from D:javaweb_workspaceSCALAsbt_eclipse_testproject
    [info] Updating {file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/project/}sbt_eclipse_test-build...
    [info] Resolving org.fusesource.jansi#jansi;1.4 ...
    [info] Done updating.
    [info] Set current project to sbt_eclipse_test (in build file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/)
    > eclipse
    [info] About to create Eclipse project files for your project(s).
    [info] Updating {file:/D:/javaweb_workspace/SCALA/sbt_eclipse_test/}sbt_eclipse_test...
    [info] Resolving org.fusesource.jansi#jansi;1.4 ...
    [info] Done updating.
    [info] Successfully created Eclipse project files for project(s):
    [info] sbt_eclipse_test
    > exit
    PS D:javaweb_workspaceSCALAsbt_eclipse_test> tree /f .
    D:JAVAWEB_WORKSPACESCALASBT_ECLIPSE_TEST
    │ .classpath
    │ .project
    │ build.sbt

    ├─.settings
    │ org.eclipse.core.resources.prefs
    │ org.scala-ide.sdt.core.prefs

    ├─project
    │ │ plugins.sbt
    │ │
    │ ├─project
    │ │ └─target
    │ │ └─config-classes
    │ │ $0b5cfab2a23c8f87aa49$.class
    │ │ $0b5cfab2a23c8f87aa49.cache
    │ │ $0b5cfab2a23c8f87aa49.class
    │ │
    │ └─target
    │ ├─config-classes
    │ ├─resolution-cache
    │ │ ├─default
    │ │ │ └─sbt_eclipse_test-build
    │ │ │ └─scala_2.10
    这个例子的参考文献:
    http://www.tuicool.com/articles/f26Bjq
    我得到的这个目录还缺少一些文件目录
    这些设置都可以在build.sbt中具体的配置


    万事走心 精益求美


  • 相关阅读:
    WinForm中AssemblyInfo.cs文件参数具体讲解
    ISO18000-6B和ISO18000-6C(EPC C1G2)标准的区别
    Win8.1下VM与Hyper-v冲突解决方法
    Mifare l卡特性简介
    【Python爬虫】beautifulsoup4库的安装与调用
    【Python爬虫】已知jpg文件url-下载图片
    【Python爬虫】测试
    【Python爬虫】Requests库的安装
    【Python】以模块化做比赛模拟
    【真随笔】未来出路,在哪里?
  • 原文地址:https://www.cnblogs.com/kongchung/p/5628466.html
Copyright © 2011-2022 走看看