

# Scala项目模板

## 构建工具

Flink项目可以使用不同的构建工具来构建。为了快速启动，Flink为以下构建工具提供了项目模板:

*   [SBT](#sbt)
*   [Maven](#maven)

这些模板帮助您设置项目结构并创建初始构建文件。

## SBT

### 创建项目

您可以通过以下两种方法来构建一个新项目:

*   [Use the **sbt template**](#sbt_template)
*   [Run the **quickstart script**](#quickstart-script-sbt)



```
 $ sbt new tillrohrmann/flink-project.g8 
```



这将提示您输入几个参数(项目名称、flink版本……)，然后从 [flink-project template](https://github.com/tillrohrmann/flink-project.g8)创建一个flink项目。您需要sbt >= 0.13.13来执行这个命令。如果有必要，您可以按照[installation guide](http://www.scala-sbt.org/download.html) 获取它。



```
 $ bash <(curl https://flink.apache.org/q/sbt-quickstart.sh) 
```



这将在**specified** 项目目录中创建一个Flink项目。

### 构建项目

为了构建您的项目，您只需发出 `sbt clean assembly` 命令。这将创建**your-project-name-assembly-0.1-SNAPSHOT.jar**中的 **target/scala_your-major-scala-version/**。

### 运行项目

为了运行您的项目，您必须发出“sbt run”命令。

默认情况下，这将在运行`sbt`的JVM中运行作业。为了在不同的JVM中运行作业，请在`build.sbt`中添加以下行



```
fork in run := true
```



#### IntelliJ

我们建议使用[IntelliJ](https://www.jetbrains.com/idea/)进行Flink作业开发。为了开始，您必须将新创建的项目导入IntelliJ。你可以通过`File -&gt; New -&gt; Project from Existing Sources...`然后选择项目的目录。IntelliJ会自动检测`build.sbt` 文件和设置一切。

为了运行Flink作业，建议选择`mainRunner` 模块作为 **Run/Debug Configuration**的类路径。这将确保所有设置为 _provided_ 的依赖项在执行时都是可用的。您可以通过**Run/Debug Configurations** `Run -&gt; Edit Configurations...`，然后从 _Use classpath of module_ 类路径中选择`mainRunner`。

#### Eclipse

为了将新创建的项目导入[Eclipse](https://eclipse.org/)，首先必须为其创建Eclipse项目文件。这些项目文件可以通过[sbteclipse](https://github.com/typesafehub/sbteclipse) 插件创建。在`PROJECT_DIR/project/plugins.sbt`中添加以下行的文件:



```
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
```



在`sbt`中，使用以下命令创建Eclipse项目文件



```
> eclipse
```



现在您可以通过`File -&gt; Import... -&gt; Existing Projects into Workspace` 然后选择项目目录。

## Maven

### 需求

唯一的要求是**Maven 3.0.4**(或更高)和 **Java 8.x** 安装。

### 创建项目

使用以下命令之一**create a project**:

*   [Use **Maven archetypes**](#maven-archetype)
*   [Run the **quickstart script**](#quickstart-script)



```
 $ mvn archetype:generate                               \
      -DarchetypeGroupId=org.apache.flink              \
      -DarchetypeArtifactId=flink-quickstart-scala     \
      -DarchetypeVersion=1.7.1 
```



这允许您将新创建的项目命名为。它会交互式地询问groupId、artifactId和包名。



```
 $ curl https://flink.apache.org/q/quickstart-scala.sh | bash -s 1.7.1
```



### 检查项目

您的工作目录中将有一个新目录。如果您使用了 _curl_ 方法，则该目录称为 `quickstart`。否则，它有您的`artifactId`的名称:



```
$ tree quickstart/
quickstart/
├── pom.xml
└── src
    └── main
        ├── resources
        │   └── log4j.properties
        └── scala
            └── org
                └── myorg
                    └── quickstart
                        ├── BatchJob.scala
                        └── StreamingJob.scala
```



示例项目是一个**Maven project**，其中包含两个类:_StreamingJob_ 和 _BatchJob_ 是_ DataStream_ 和 _DataSet_ 程序的基本框架程序。_main_ 方法是程序的入口点，用于ide内测试/执行和适当的部署。

我们建议您**将这个项目导入您的IDE**中。

IntelliJ IDEA支持Maven开箱即用，并为Scala开发提供了一个插件。从我们的经验来看，IntelliJ为开发Flink应用程序提供了最好的体验。

对于Eclipse，您需要以下插件，您可以从提供的Eclipse更新站点安装这些插件:

*   _Eclipse 4.x_
    *   [Scala IDE](http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site)
    *   [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
    *   [Build Helper Maven Plugin](https://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-buildhelper/0.15.0/N/0.15.0.201207090124/)
*   _Eclipse 3.8_
    *   [Scala IDE for Scala 2.11](http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site) or [Scala IDE for Scala 2.10](http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site)
    *   [m2eclipse-scala](http://alchim31.free.fr/m2e-scala/update-site)
    *   [Build Helper Maven Plugin](https://repository.sonatype.org/content/repositories/forge-sites/m2e-extras/0.14.0/N/0.14.0.201109282148/)

### 构建项目

如果您想**构建/打包您的项目**，请转到您的项目目录并运行 ‘`mvn clean package`’ 命令。您将找到一个JAR文件，其中包含您的应用程序，以及您可能作为依赖项添加到应用程序中的连接器和库:`target/&lt;artifact-id&gt;-&lt;version&gt;.jar`。

**注意:** 如果您使用与 _StreamingJob_ 不同的类作为应用程序的主类/入口点，我们建议您更改`pom.xml` 中的`mainClass` 设置。相应的xml的文件。这样，Flink就可以从JAR文件运行应用程序，而无需额外指定主类。

## 下一个步骤

写您的应用程序!

如果您正在编写流应用程序，并且正在寻找编写内容的灵感，请参阅[Stream Processing application Tutorial](//ci.apache.org/projects/flink/flink-docs-release-1.7/tutorials/datastream_api.html#writing-a-flink-program)

如果您正在编写批处理应用程序，并且正在寻找编写的灵感，那么可以参考[Batch Application Examples](//ci.apache.org/projects/flink/flink-docs-release-1.7/dev/batch/examples.html)

有关APIa的完整概述，请查看[DataStream API](//ci.apache.org/projects/flink/flink-docs-release-1.7/dev/datastream_api.html)和[DataSet API](//ci.apache.org/projects/flink/flink-docs-release-1.7/dev/batch/index.html)小节。

[Here](//ci.apache.org/projects/flink/flink-docs-release-1.7/tutorials/local_setup.html)您可以了解如何在本地集群上运行IDE之外的应用程序。

如果您有任何问题，请访问我们的[Mailing List](http://mail-archives.apache.org/mod_mbox/flink-user/)。我们很乐意提供帮助。

