Scala Tip

本文详细介绍了Scala编程语言及其生态系统中Sbt构建工具的使用。特别关注了如何优化Sbt配置,以避免在多分区Windows系统下库管理的空间问题,并提供了定制本地库存储位置的步骤。此外,还通过简单的代码示例展示了如何使用Sbt运行Scala程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

http://www.scala-lang.org/downloads

http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html

因为sbt会使用ivy作为库管理工具。ivy默认把library repository建在user home下面。Unix/Linux/Mac OS都还好说,如果就一个分区(或一个逻辑分区),无所谓发在哪个位置啦。如果操作系统是Windows,有分了C: D: E: 等若干分区,还是不要放在默认的%USERPROFILE%下面,C盘会随着开发的项目越来越多,大量的空间被开发库所占用。定制library local repository的位置的方法是:
编辑文件sbt启动脚本: [sbt安装目录]\sbt.bat,设置Java启动参数:-Dsbt.ivy.home=E:/dev/ivy/

 java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar `dirname $0`/sbt-launch.jar "$@"

----

sbt shell

#!/usr/bin/env bash

declare -r NOSHARE="-Dsbt.global.base=project/sbtboot -Dsbt.boot.directory=project/boot -Dsbt.ivy.home=project/ivy"

java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M $NOSHARE -jar `dirname $0`/sbt-launch.jar "$@"

----------------

$ cat run.sh 
#!/bin/bash
#

 java -cp project/boot/scala-2.9.2/lib/scala-library.jar:target/scala-2.9.2/hello_2.9.2-1.0.jar $@


----------------

package jiux

object Upcase {
    def main( args : Array[String] ) {
        //scala.io.Source.stdin.getLines map { _.toUpperCase } foreach println
        scala.io.Source.stdin.getLines.map{ _.toUpperCase }.foreach(println)
    }
}


-----------------

class Exe(command:String, out:String=>Unit, err:String=>Unit, onExit:Int=>Unit) {

    import scala.sys.process._
    import scala.io._
    import java.io._
    import scala.concurrent._
    import scala.concurrent.ops.spawn

    val inputStream = new SyncVar[OutputStream];

    val process = Process(command).run(
        new ProcessIO(
            stdin => inputStream.put(stdin),
            stdout => Source.fromInputStream(stdout).getLines.foreach(out),
            stderr => Source.fromInputStream(stderr).getLines.foreach(err)));

    spawn { onExit(process.exitValue()) }

    def write(s:String):Unit = synchronized {
        inputStream.get.write((s + "\n").getBytes)
    }

    def close():Unit = {
        inputStream.get.close
    }
}


can use like this


import java.util.concurrent.CountDownLatch

val latch = new CountDownLatch(1)

val exe = new Exe("tr [a-z] [A-Z]",
        out => println("o: " + out), 
        err => println("e: " + err), 
        code=> {println(code) ; latch.countDown() })
exe.write("lower") 
exe.close()

----------------------------------------------------

> ./sbt update
> ./sbt package
> ./sbt assembly-package-dependency

转载于:https://my.oschina.net/kuerant/blog/134232

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值