2020-11-17
< view all postsFlink和Spark这类大数据库中有大量的源码是用Scala编写的,我们对这些库进行二次开发、构建定制化的版本,需要对其中的Scala代码进行编译。
Flink以及Spark使用的官方包管理工具是Maven(Kafka是Gradle),下面介绍基于Maven的开发和编译方法。
首先要在IDEA里安装Scala插件。IDEA在联网环境里是可以在软件内下载的,不过我们开发环境是和外网隔离的,所以需要手动下载。可以在这个地址下载。在IDEA里找到File->Settings->Plugins,选择Install Plugin From Disk。
还需要安装Scala的SDK。如果在联网环境IDEA也是可以自动下载的,我们手动进入这个地址,注意选择“Download the Scala binaries for windows”(不是下载sbt)。之后进行安装。
在IDEA里创建项目时,和一般的Java项目一样,还是选择创建空的Maven项目(不要用模板archetype-scala)。之后在/src/main下面新建一个scala目录,和java目录同级。这时候右键scala目录,是没有Scala Class这个选项的,但是没有关系,先选择New->File新建一个文件,文件名里把后缀.scala写上,IDEA就会自动识别。这时候会提示没有SDK,点击添加,选择刚刚安装好的SDK就可以了。
这时候编译还是不行的,需要在pom文件里加入scala的依赖和插件。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>scala.learn</groupId> <artifactId>pomtest</artifactId> <version>1.0-SNAPSHOT</version> <properties> <scala.version>2.13.1</scala.version> </properties> <dependencies> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>${scala.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <id>compile</id> <goals> <goal>compile</goal> </goals> <phase>compile</phase> </execution> <execution> <id>test-compile</id> <goals> <goal>testCompile</goal> </goals> <phase>test-compile</phase> </execution> <execution> <phase>process-resources</phase> <goals> <goal>compile</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
这样就可以用Maven编译Scala代码了。
补充一点,网上也有很多资料是使用sbt进行依赖管理的,如果要使用sbt进行编译,需要在~/.sbt目录内新建一个repositories文件。文件中加入镜像源的地址,例如:
[repositories] public: https://.../public/ repo2: https://...
之后启动sbt时,在命令后加入override的参数:
sbt -Dsbt.override.build.repos=true