`
wbj0110
  • 浏览: 1611606 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

scala eclipse sbt 应用程序开发

阅读更多

由于Scala有一个比较完备的Eclipse IDE(Scala IDE for Eclipse), 对于不想从eclipse迁移到Iea平台的Dev来说,如何方便、快速、有效得在Eclipse下编译打包开发Scala应用程序尤为重要。Sbt是类似Maven的一个构建工具,我们将使用它来构建发布程序。

本文会介绍搭建Eclipse开发Scala应用程序的一般步骤,并结合实例演示sbt工具在eclipse里是如何创建项目文件,和编译打包部署程序的。

这里做个备忘,也为初学者少走弯路而做出点小小的贡献。

一、环境准备:

2、Scala IDE for Eclipse :scala-ide.org

4、Sbt Eclipse : https://github.com/typesafehub/sbteclipse   typesafe的一个sbt for eclipse的助手,可以帮助生成eclipse

5、Sbt Assembly : https://github.com/sbt/sbt-assembly 发布应用程序的一个sbt插件。

以上列出均为开发时必须的软件环境:

我的,Scala版本是2.10.3, Sbt版本是0.13

二、sbt生成scala eclipse项目:

我们想要在Eclipse里开发scala应用并符合sbt发布程序的文件结构(类似Maven结构),除了手工建立文件结构,还可以采用sbt eclipse的配置方法。

2.1、添加sbt eclipse插件

有2种配置方式:

一种是在 ~/.sbt/0.13/plugins//build.sbt 里配置addPlugin,这种做法是全局的插件,即对本机所有sbt项目均使用。

另一种是每个项目不一样的plugins,则是在每个项目跟目录下project/plugins.sbt里进行插件配置。

victor@victor-ubuntu:~/workspace/test_sbt$ pwd
/home/victor/workspace/test_sbt
victor-ubuntu:~/workspace/test_sbt$ tree .
.
├── build.sbt
└── project
    └── plugins.sbt

1 directory, 2 files

    plugins.sbt里面内容配置,添加插件:

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

2.2、生成eclipse项目文件

然后进入到根目录sbt,成功进入sbt,运行eclipse命令生成eclipse的.classpath等eclipse相关文件:

victor@victor-ubuntu:~/workspace/test_sbt$ ll
total 28
drwxrwxr-x 5 victor victor 4096  8月  4 00:38 ./
drwxrwxr-x 8 victor victor 4096  8月  4 00:28 ../
-rw-rw-r-- 1 victor victor    0  8月  4 00:38 build.sbt
-rw-rw-r-- 1 victor victor  589  8月  4 00:38 .classpath
drwxrwxr-x 4 victor victor 4096  8月  4 00:38 project/
-rw-rw-r-- 1 victor victor  362  8月  4 00:38 .project
drwxrwxr-x 4 victor victor 4096  8月  4 00:38 src/
drwxrwxr-x 4 victor victor 4096  8月  4 00:38 target/

  可以看到和maven的目录结构是相似的:

victor@victor-ubuntu:~/workspace/test_sbt$ tree src
src
├── main
│   ├── java
│   └── scala
└── test
    ├── java
    └── scala

发现没有resouces目录:

在跟目录的build.sbt里添加:

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource

   再执行sbt eclipse 

victor@victor-ubuntu:~/workspace/test_sbt$ tree src/
src/
├── main
│   ├── java
│   ├── resources
│   └── scala
└── test
    ├── java
    ├── resources
    └── scala

2.3、导入Eclipse中

我们进入Eclipse,利用导入向导的import existing project into workspace这一项进行导入。

至此,我们的项目结构搭建完成,可以像开发java maven项目一样的开发scala sbt项目了。

三、开发与部署

下面准备用一个实际例子演示在Scala里开发的一般步骤,最近用到scala里的json,就用json4s这个json lib来开发一个解析json的例子,json4s地址:https://github.com/json4s/json4s

3.1、添加依赖

我们如果想使用第三方的类,就需要添加依赖关系,和GAV坐标,这个再熟悉不过,我们需要编辑根目录下的build.sbt文件,添加依赖:

这里name,version,scalaVersion要注意每个间隔一行,其它的也是,不然会出错。

libraryDependencies是添加依赖的地方:我们添加2个。

resolvers是仓库地址,这里配置了多个。

name := "shengli_test_sbt"

version := "1.0"

scalaVersion := "2.10.3"

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource

libraryDependencies ++= Seq(
  "org.json4s" %% "json4s-native" % "3.2.10",
  "org.json4s" %% "json4s-jackson" % "3.2.10"
)

resolvers ++= Seq(
// HTTPS is unavailable for Maven Central
"Maven Repository"     at "http://repo.maven.apache.org/maven2",
"Apache Repository"    at "https://repository.apache.org/content/repositories/releases",
"JBoss Repository"     at "https://repository.jboss.org/nexus/content/repositories/releases/",
"MQTT Repository"	at "https://repo.eclipse.org/content/repositories/paho-releases/",
"Cloudera Repository"  at "http://repository.cloudera.com/artifactory/cloudera-repos/",
// For Sonatype publishing
// "sonatype-snapshots"   at "https://oss.sonatype.org/content/repositories/snapshots",
// "sonatype-staging"     at "https://oss.sonatype.org/service/local/staging/deploy/maven2/",
// also check the local Maven repository ~/.m2
Resolver.mavenLocal
)

    再次运行sbt eclipse,则依赖的jar包会自动加载到classpath:

3.2、测试程序

一个简单的解析Json的程序,程序很简单,这里就不解释了。

package com.shengli.json
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._

object JsonSbtTest extends Application{


  case class Winner(id: Long, numbers: List[Int])
  case class Lotto(id: Long, winningNumbers: List[Int], winners: List[Winner], drawDate: Option[java.util.Date])

  val winners = List(Winner(23, List(2, 45, 34, 23, 3, 5)), Winner(54, List(52, 3, 12, 11, 18, 22)))
  val lotto = Lotto(5, List(2, 45, 34, 23, 7, 5, 3), winners, None)
  val json =
    ("lotto" ->
      ("lotto-id" -> lotto.id) ~ 
      ("winning-numbers" -> lotto.winningNumbers) ~
      ("draw-date" -> lotto.drawDate.map(_.toString)) ~
      ("winners" ->
        lotto.winners.map { w =>
          (("winner-id" -> w.id) ~
           ("numbers" -> w.numbers))}))

  println(compact(render(json)))
  println(pretty(render(json)))
}

    至此我们在eclipse能运行Run as Scala Application,但是如何加依赖打包发布呢?

3.3、Assembly

还记得Spark里面的assembly吗?那个就是发布用的,sbt本身支持的clean compile package之类的命令,但是带依赖的one jar打包方式还是assembly比较成熟。

clean Deletes all generated files (in the target directory).
compile Compiles the main sources (in src/main/scala andsrc/main/java directories).
test Compiles and runs all tests.
console Starts the Scala interpreter with a classpath including the compiled sources and all dependencies. To return to sbt, type:quit , Ctrl+D (Unix), or Ctrl+Z (Windows).
run <argument>* Runs the main class for the project in the same virtual machine as sbt.
package Creates a jar file containing the files in src/main/resources and the classes compiled from src/main/scala and src/main/java .
help <command> Displays detailed help for the specified command. If no command is provided, displays brief descriptions of all commands.
reload Reloads the build definition ( build.sbt , project/*.scala ,project/*.sbt files). Needed if you change the build definition.

Assembly :

Assembly是作为一种插件的,所以要在project下面的plugins.sbt里面配置,至此plugins.sbt文件里内容如下:

resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")

    除了插件的配置之外,还需要配置跟目录下build.sbt,支持assembly,在文件头部加入:

import AssemblyKeys._
assemblySettings

   至此build.sbt文件内容如下:

import AssemblyKeys._
assemblySettings

name := "shengli_test_sbt"

version := "1.0"

scalaVersion := "2.10.3"

EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource

libraryDependencies ++= Seq(
  "org.json4s" %% "json4s-native" % "3.2.10",
  "org.json4s" %% "json4s-jackson" % "3.2.10"
)

resolvers ++= Seq(
// HTTPS is unavailable for Maven Central
"Maven Repository"     at "http://repo.maven.apache.org/maven2",
"Apache Repository"    at "https://repository.apache.org/content/repositories/releases",
"JBoss Repository"     at "https://repository.jboss.org/nexus/content/repositories/releases/",
"MQTT Repository"	at "https://repo.eclipse.org/content/repositories/paho-releases/",
"Cloudera Repository"  at "http://repository.cloudera.com/artifactory/cloudera-repos/",
// For Sonatype publishing
// "sonatype-snapshots"   at "https://oss.sonatype.org/content/repositories/snapshots",
// "sonatype-staging"     at "https://oss.sonatype.org/service/local/staging/deploy/maven2/",
// also check the local Maven repository ~/.m2
Resolver.mavenLocal
)

   运行sbt assembly命令进行发布:

> assembly
[info] Updating {file:/home/victor/workspace/test_sbt/}test_sbt...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source to /home/victor/workspace/test_sbt/target/scala-2.10/classes...
[warn] there were 1 deprecation warning(s); re-run with -deprecation for details
[warn] one warning found
[info] Including: scala-compiler-2.10.0.jar
[info] Including: scala-library-2.10.3.jar
[info] Including: json4s-native_2.10-3.2.10.jar
[info] Including: json4s-core_2.10-3.2.10.jar
[info] Including: json4s-ast_2.10-3.2.10.jar
[info] Including: paranamer-2.6.jar
[info] Including: scalap-2.10.0.jar
[info] Including: jackson-databind-2.3.1.jar
[info] Including: scala-reflect-2.10.0.jar
[info] Including: jackson-annotations-2.3.0.jar
[info] Including: json4s-jackson_2.10-3.2.10.jar
[info] Including: jackson-core-2.3.1.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF/NOTICE' with strategy 'rename'
[warn] Merging 'META-INF/LICENSE' with strategy 'rename'
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard'
[warn] Merging 'rootdoc.txt' with strategy 'concat'
[warn] Strategy 'concat' was applied to a file
[warn] Strategy 'discard' was applied to a file
[warn] Strategy 'rename' was applied to 2 files
[info] SHA-1: d4e76d7b55548fb2a6819f2b94e37daea9421684
[info] Packaging /home/victor/workspace/test_sbt/target/scala-2.10/shengli_test_sbt-assembly-1.0.jar ...
[info] Done packaging.
[success] Total time: 39 s, completed Aug 4, 2014 1:26:11 AM

  我们发现文件发布到了/home/victor/workspace/test_sbt/target/scala-2.10/shengli_test_sbt-assembly-1.0.jar

那我们来执行一下,看是否成功:

执行:

java -cp /home/victor/workspace/test_sbt/target/scala-2.10/shengli_test_sbt-assembly-1.0.jar com.shengli.json.JsonSbtTest

victor@victor-ubuntu:~/workspace/test_sbt$ java -cp /home/victor/workspace/test_sbt/target/scala-2.10/shengli_test_sbt-assembly-1.0.jar com.shengli.json.JsonSbtTest
{"lotto":{"lotto-id":5,"winning-numbers":[2,45,34,23,7,5,3],"winners":[{"winner-id":23,"numbers":[2,45,34,23,3,5]},{"winner-id":54,"numbers":[52,3,12,11,18,22]}]}}
{
  "lotto" : {
    "lotto-id" : 5,
    "winning-numbers" : [ 2, 45, 34, 23, 7, 5, 3 ],
    "winners" : [ {
      "winner-id" : 23,
      "numbers" : [ 2, 45, 34, 23, 3, 5 ]
    }, {
      "winner-id" : 54,
      "numbers" : [ 52, 3, 12, 11, 18, 22 ]
    } ]
  }
}

   证实发布的结果是成功的。

四、总结

本文介绍了在Eclipse里利用Sbt构建开发Scala程序的一般步骤,并用实例讲解了整个流程。

用sbt eclipse插件生成sbt文件目录结构,sbt eclipse命令来生成更新jar包依赖。

用assebly插件对scala应用进行打包发布。

http://www.tuicool.com/articles/f26Bjq

 

大家可以加我个人微信号:scccdgf

 

 

或者关注soledede的微信公众号:soledede
微信公众号:
分享到:
评论

相关推荐

    scala eclipse 插件

    Scala Eclipse 插件是开发Scala程序的重要工具,它为Eclipse IDE提供了对Scala语言的全面支持,让开发者能够在熟悉的Eclipse环境中编写、调试和管理Scala项目。以下将详细阐述Scala Eclipse插件的安装、功能以及如何...

    scala211-eclipse-plugin(4.4and4.5).zip

    Scala 2.11 Eclipse 插件使得在 Eclipse 中开发 Scala 应用程序变得更加便捷。 3. **安装过程**: 安装 Scala 插件通常涉及访问 Eclipse 的“帮助”菜单,然后选择“安装新软件”,输入更新站点 URL。对于这个压缩包...

    sbteclipse

    `sbt eclipse` 是 sbt 的一个插件,它的主要作用是将 sbt 项目转换成 Eclipse 可识别的格式,使得开发人员可以在 Eclipse 这样的集成开发环境中(IDE)无缝地进行 Scala 或 Java 开发。Eclipse 是一款功能丰富的开源...

    scala for eclipse neon plugins

    通过SBT,用户可以直接在Eclipse中管理项目依赖、编译、打包和运行应用。 3. **调试器**:插件提供了Scala语言的调试器,允许用户设置断点、查看变量值、单步执行代码,以及进行其他调试操作,以便更好地理解和修复...

    scala 2.7.7Eclipse插件

    - 利用Eclipse的调试工具对Scala程序进行调试,包括设置断点、单步执行、查看变量值等。 - 自动导入所需库和模块,提升开发效率。 - 实现代码重构,使代码更易于维护。 需要注意的是,这个插件是为Eclipse 3.4及更...

    eclipse插件 scala下载

    Eclipse是广泛使用的Java开发集成环境,而Scala Eclipse插件是开发者在Eclipse中编写、调试和运行Scala程序的重要工具。 首先,关于"eclipse插件 scala下载"这个主题,要安装Scala Eclipse插件,你可以通过以下步骤...

    eclipse-scala-plugin插件 测试可用功

    Scala是一种强大的静态类型编程语言,它结合了面向对象和函数式编程的特点,被广泛应用于开发高性能、可维护的软件。Eclipse Scala Plugin是Eclipse集成开发环境(IDE)的一个扩展,旨在提供对Scala语言的全面支持,...

    Eclipse下创建sbt项目

    Eclipse是 Java Integrated Development Environment(IDE),而sbt是 Scala 的构建工具。要在Eclipse中创建sbt项目,需要安装sbt、创建项目结构、编写build.sbt文件、添加Eclipse支持插件等步骤。 一、安装sbt 在...

    eclipse scala 插件 离线安装包

    Eclipse Scala插件是开发Scala语言程序的重要工具,它为Eclipse IDE提供了对Scala语言的全面支持。在没有网络连接或者网络环境不稳定的情况下,离线安装包成为了安装该插件的理想选择。以下将详细介绍如何使用...

    eclipse-Scala插件

    "Eclipse Scala插件"是专门为Eclipse集成开发环境设计的一款扩展工具,它使得在Eclipse中编写、调试和管理Scala项目变得方便而高效。Scala是一种强大的、多范式的编程语言,融合了面向对象和函数式编程的特性,为...

    eclipse-scala

    Compared to other programming languages, installing Scala is a bit unusual. Scala is unusual because ... Both of the above options manage (via sbt) a specific Scala version per Scala project you create.

    eclipse scala 插件part1

    Eclipse Scala 插件是开发Scala程序的重要工具,它为Eclipse IDE提供了强大的Scala语言支持。在本部分,我们将深入探讨这个插件的功能、安装过程以及如何利用它来提升Scala编程的效率。 首先,让我们了解Scala语言...

    scala sdk scala-2.12.3

    Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...

    flume-plugin-maven-plugin-1.0.zip

    本文将深入探讨一个名为"flume-plugin-maven-plugin-1.0.zip"的开源项目,以及在其中涉及到的"Maven插件"和"@SuppressWarnings注解"的使用,旨在帮助开发者更好地理解和应用这些技术。 "Maven"是一个广泛使用的项目...

    eclipse-scala.rar

    使用Eclipse Scala,开发者可以轻松配置Maven或SBT(Scala Build Tool)构建系统,管理依赖项,执行构建任务。这些工具可以帮助自动化项目的构建过程,确保代码的正确性和一致性。 7. **调试与分析** Eclipse ...

    scala-SDK-4.2.0-vfinal-2.11-win32.win32.x86

    Scala SDK 4.2.0 是一个用于开发 Scala 应用程序的软件开发工具包,专为基于 Java 的 JVM(Java 虚拟机)设计。这个版本是针对 Windows 操作系统的,具体构建为 win32.x86,意味着它是为 32 位架构的 Windows 设备...

    Scala window 开发包

    总之,"Scala window 开发包"提供了在Windows环境中开发Scala应用程序的基础,包括Scala的运行时环境。要成为一名有效的Scala开发者,不仅需要安装和配置好开发环境,还需要深入理解Scala语言的特性和相关工具的使用...

    Sbt-1.2.8(最新版64位)

    Sbt与许多流行的IDE(如IntelliJ IDEA、Eclipse)有良好的集成,可以通过导入Sbt项目设置快速开始开发工作,享受代码自动完成、重构、调试等便利。 ### 6. 性能优化 Sbt 1.2.8版本对性能进行了优化,包括更快的...

    sbteclipse:sbt插件可创建Eclipse项目定义

    sbteclipse 插件可创建项目定义。 请参阅下面的安装详细信息和以获取有关配置sbteclipse的信息。 可以在下面找到有关捐款政策和许可证的信息。 安装和基本用法 打开您的插件定义文件(如果不存在,请创建一个)。 ...

Global site tag (gtag.js) - Google Analytics