运行第一个scala程序

简介: 运行第一个scala程序

使用Sbt创建项目

在Scala开发中,sbt(简称"Simple Build Tool")是一种构建工具,用于管理Scala项目的编译、依赖管理和打包等任务。sbt是一种基于命令行的构建工具,它使用Scala语言编写,提供了一种声明式的配置语法,使得构建和管理项目变得更加简单。

以下是sbt的一些主要功能:

  1. 编译和运行: sbt可以编译Scala代码并运行应用程序。它会自动处理项目中的依赖关系,并确保编译和运行环境的正确配置。
  2. 依赖管理: sbt使用简单的配置文件(通常是build.sbt)来定义项目的依赖关系。通过这些配置,sbt可以自动下载和管理项目所需的库和框架。
  3. 任务和插件: sbt使用任务(Tasks)来执行各种构建任务,例如编译、运行测试、打包等。它还支持插件,可以通过插件扩展和定制构建过程。
  4. 增量编译: sbt支持增量编译,只重新编译发生更改的文件,以加快构建过程。
  5. 交互式Shell: sbt提供了一个交互式Shell,开发者可以在其中执行命令、查看项目状态、运行测试等,使得与构建工具的交互更加灵活。
  6. 多项目构建: sbt支持多项目构建,可以轻松地组织和管理具有多个模块的大型项目。
  7. 发布和部署: sbt可以用于将项目打包为可执行的JAR文件或发布到远程仓库,以便其他项目使用。

在Scala社区中,sbt已成为标准的构建工具,被广泛应用于Scala项目的开发和构建过程。通过简洁的语法和强大的功能,sbt使得开发者能够更轻松地管理和构建复杂的Scala应用程序。

在idea中使用sbt

新建一个scala项目,在项目根目录下创建build.sbt文件


buid.sbt文件

build.sbt 文件是 sbt 构建工具中的主要配置文件,用于定义 Scala 项目的构建设置、依赖关系、编译选项等信息。它采用 Scala 语言编写,以一种声明式的方式描述项目的构建配置。

以下是 build.sbt 文件的主要作用:

  1. 项目的基本信息:build.sbt 中,我们可以定义项目的基本信息,包括项目的名称、版本、组织、Scala 版本等。这些信息对于构建和发布项目都是很重要的。
name := "MyProject"
version := "1.0"
organization := "com.example"
scalaVersion := "2.13.8"
  1. 依赖管理:通过libraryDependencies设置,我们可以指定项目的依赖关系,包括需要使用的外部库和框架。sbt 会根据这些依赖关系自动下载相应的库文件。
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.2.0"
  1. 编译选项:我们可以通过scalacOptions设置 Scala 编译器的选项,例如警告级别、优化级别等。
scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature")
  1. 插件配置:如果我们在项目中使用了 sbt 插件,我们可以在plugins.sbt文件中配置插件。这些插件可能提供额外的功能,如代码生成、打包优化等。
addSbtPlugin("com.typesafe.akka" % "sbt-akka" % "2.6.16")
  1. 任务定义: 我们可以定义自定义的 sbt 任务,以执行项目特定的操作。这些任务可以在 sbt 的交互式 Shell 中运行。
lazy val myCustomTask = taskKey[Unit]("My custom task")

myCustomTask := {
  println("Executing my custom task!")
}

总的来说,build.sbt 文件是 Scala 项目的中央配置文件,它定义了项目的结构、依赖、编译选项等方面的信息。在使用 sbt 进行构建的过程中,这个文件将被 sbt 解释和执行,以确保项目能够被正确地构建和管理。

目录介绍

sbt 构建工具的目录结构如下:


该结构包括以下几个主要目录:

  • .idea:IDEA的配置文件目录,包含了项目的结构信息、代码风格设置等。
  • project:项目的配置文件目录,包含了项目的依赖项、插件等。
  • src:项目的源码目录,包含了项目的所有源码文件。
  • target:项目的构建输出目录,包含了编译后的class文件、jar文件等。

.idea目录中的文件主要用于IDEA的配置,包括:

  • .gitignore:用于忽略git版本控制中的文件。
  • modules.xml:用于指定项目的模块结构。
  • project.properties:用于指定项目的属性,例如项目名称、版本号等。

project目录中的文件主要用于项目的配置,包括:

  • build.sbt:用于指定项目的构建配置,例如依赖项、插件等。
  • plugins.sbt:用于指定项目的插件配置。

src目录中的文件是项目的源码文件,包括:

  • main:用于存放主应用程序的源码文件。
  • test:用于存放测试代码的源码文件。

target目录中的文件是项目的构建输出文件,包括:

  • classes:用于存放编译后的class文件。
  • jar:用于存放打包后的jar文件。

编写第一个scala程序

等到idea中sbt依赖安装成功后,就可以在idea中编写第一个scala程序了。


在Scala中,编写一个简单的Hello World程序非常简单。下面是一个示例:

object HelloWorld {
    def main(args: Array[String]): Unit = {
        println("Hello, World!")
        println("Hello, Scala!")
        println("Hello, sbt!")
        println("Hello, IDEA!")
        println("Hello, sbt + IDEA!")
        println("Hello, Scala + sbt + IDEA!")
            }
}

运行的结果如下:


这份Scala例子代码涉及到的语法主要包括以下几个方面:

  • 对象(object):对象是Scala的基本抽象数据类型,类似于Java中的类。对象可以包含属性、方法和其他代码。
  • 方法(def):方法是对象或类中定义的函数。方法可以接受参数,也可以返回值。
  • 参数(参数列表):参数是方法接受的输入值。参数列表可以包含任意数量的参数。
  • 返回值(类型):返回值是方法返回的值。返回值类型可以是任何类型。
  • println():println()方法用于在控制台输出字符串。
  • Array[String]:Array[String]是Scala中的一个数组类型,用于存储字符串。
  • Unit:Unit是Scala中的一个特殊类型,表示没有返回值。

具体来说,这份代码定义了一个名为HelloWorld的对象,并在对象中定义了一个名为main()的方法。main()方法是Scala程序的主入口点,它会在程序启动时被调用。

在main()方法中,使用println()方法在控制台输出了"Hello, World!"等字符串。

参数args是一个Array[String]类型的变量,它用于存储命令行参数。

Unit是Scala中的一个特殊类型,表示没有返回值。因此,main()方法的返回值类型为Unit。

编写java和scala的混合程序

来看看下面的程序

在项目中同时使用 Java 和 Scala 时,可以编写混合语言的程序。这样的程序可以包含 Java 类和 Scala 类,并且它们可以相互调用。以下是一个简单的混合程序,其中包含一个 Java 类和一个 Scala 类,它们互相调用:

Java 类(HelloJava.java):

public class HelloJava {
    private String message;

    public HelloJava(String message) {
        this.message = message;
    }

    public void printMessage() {
        System.out.println("Java says: " + message);
    }
}

Scala 类(HelloScala.scala):

class HelloScala {
  def printMessage(message: String): Unit = {
    println(s"Scala says: $message")
  }

  def callJava(): Unit = {
    val javaObject = new HelloJava("Hello from Java")
    javaObject.printMessage()
  }
}

混合程序(MixedProgram.scala):

object MixedProgram {
  def main(args: Array[String]): Unit = {
    // 创建 Scala 类对象
    val scalaObject = new HelloScala

    // 调用 Scala 类的方法
    scalaObject.printMessage("Hello from Scala")

    // 调用 Scala 类中调用 Java 类的方法
    scalaObject.callJava()
  }
}

在这个混合程序中:

  • HelloJava 是一个简单的 Java 类,包含了一个构造函数和一个打印消息的方法。
  • HelloScala 是一个 Scala 类,包含了一个打印消息的方法和一个调用 Java 类的方法。
  • MixedProgram 是一个 Scala 对象,包含了 main 方法,用于创建 HelloScala 对象并调用其中的方法。

我们可以将这三个文件放在同一个项目中,并使用我们的 Scala 编译器(例如 scalac)和 Java 编译器(例如 javac)来编译这些文件。然后,我们可以运行 MixedProgram 来看到 Java 和 Scala 类的相互调用。

运行结果如下:

由此我们可以得出结论,在 Scala 中编写 Java 和 Scala 的混合程序,可以很好地实现代码的复用和扩展。

目录
相关文章
|
7月前
|
数据采集 人工智能 数据可视化
Scala多线程爬虫程序的数据可视化与分析实践
Scala多线程爬虫程序的数据可视化与分析实践
|
2月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
40 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
6月前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之Aataworks运行scala实例,如何配置参数
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
44 0
|
6月前
|
Java Scala Maven
Intellij IDEA+Maven+Scala第一个程序
Intellij IDEA+Maven+Scala第一个程序
138 0
Scala 运行代码报错: error: object redisson is not a member of package org
Scala 运行代码报错: error: object redisson is not a member of package org
Scala 运行代码报错: error: object redisson is not a member of package org
|
Java Scala 开发者
Java 模拟 Scala 的运行机制|学习笔记
快速学习 Java 模拟 Scala 的运行机制。
107 0
Java 模拟 Scala 的运行机制|学习笔记
|
Java Scala
Java运行Scala代码
Java运行Scala代码
181 0
|
前端开发 安全 Scala