使用 VS Code 搭建 java + scala 开发环境

前言

intellij Idea 真香,yyds。不过由于公司开发环境限制(付费软件、资源占用高等 因素 ??? )加上个人技术栈上的扩展(需要多个IDE)并且这几年 vs code 也很火,插件也越来越成熟,足以满足大多数开发需求。因为笔者主要从事大数据相关的开发,项目代码 以 java + scala 混写,采用 maven 编译打包,在配置vs code 开发环境中,还是遇到不少小坑,便记录如下 :

0x 01、安装软件与环境 vscode、jdk、scala

1.1 vs code 官网下载 安装

下载地址:https://code.visualstudio.com/

插件安装

点击右边栏的 扩展(ctrl+shfit+x)打开插件管理界面;
笔者安装的插件列表如下:

  • Chinese (Simplified) (简体中文) Language Pack
  • Extension Pack for Java
  • Scala (Metals)
  • Scala Snippets
  • Scala Syntax (official)
  • Scaladex search
  • XML

1.2 jdk 安装与配置

jdk 这里要选者jdk 11的版本(Extension Pack for Java 插件要求,不能选择 jdk8 😂)
https://www.openlogic.com/openjdk-downloads
https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.15+10/OpenJDK11U-jdk_x64_linux_hotspot_11.0.15_10.tar.gz

安装好后 配置环境变量
JAVA_HOME=安装目录 并且把 %JAVA_HOME%/bin 配置到 PATH 变量中
maven 下载地址 : https://maven.apache.org/
maven 的配置比较简单,只需要有JAVA_HOME的存在,然后再把 安装后的 bin目录 配置到 PATH 变量中。
maven 默认仓库比较慢,可以配置 阿里云镜像仓库,修改 maven 主目录下 settings.xml 添加如下配置

     <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
     </mirror>

1.3 scala 安装

官网下载scala 2.12.12(目前 spark、flink 支持比较好得还是 2.11与2.12)直接安装即可。

0x 02、maven 基础工程搭建

在实测中,maven for java 相对成熟,一次过,然后maven for scala 中途大大小小遇到不少问题,因此这里采用先创建一个标准 scala maven 工程,然后在 手动扩展成 java + scala 得方式,最后我们可以把这个 pom 打包成自己的模板,下次直接创建就行了。

2.1 创建 scala maven 工程

1、使用 metals > new scala project > scalameta/maven-scala-seed.g8

image.png

2、创建好工程后,需要安装一个maven 组件 mvn ch.epfl.scala:maven-bloop_2.10:<bloop_version>:bloopInstall.

这一步 在 metals 官方文档中提到过,但我一开始这里出点问题,反反复复的 试了好多次才成功。
具体操作为 在当前工程目录下 打开 终端,然后执行如下命令:
mvn ch.epfl.scala:maven-bloop_2.13:1.5.0-18-003e6c7b:bloopInstall -DdownloadSources=true
如果运行结果报错,可能原因有如下:
1、JAVA_HOME, PATH 配置问题:提示命令找不到
2、提示 NoClassDefFoundError: scala_maven/ScalaContinuousCompileMojo。 这里可能是版本问题,也可能是 本地缓存的maven 包问题,处理方式 是
a、清理 user/.m2/repository/ch/ 本地缓存
b、查看项目 中的 pom.xml ,修改 scala-maven-plugin version 版本为 4.6.2(当前最新)
image.png
c、更换 maven-bloop_2.13:1.5.0-18-003e6c7b 版本, 笔者一开始 是用的1.5.0-22-x版本一直报错,后面更换到 18版本 解决,具体可以查看 maven repository,可换版本尝试
https://mvnrepository.com/artifact/ch.epfl.scala/maven-bloop

3、应用 metals 的 import build 功能

image.png
此处可能引发的报错为 ERROR Opening a bsp server connection with 'bsp --protocol tcp --port
笔者的解决办法是 通过设置 metals 的 java home 解决
image.png

4、若上述操作顺利的化,咱们进入到资源管理 进行的编码运行测试

笔者这里简单的添加一些测试代码,并添加了 fastjson maven包,可以看到,Hello.Scala 上面有一个 run|debug 标识的,在这里 直接点击 run 就可以运行了,是不是也很方便?
image.png
需要注意的是 当在pom.xml 中添加了 dependency 后,需要在执行一次 import build,这样编辑器界面 导入包 才有提醒 。

2.2 maven 同时支持 java 和 scala 混合打包

1、build-helper-maven-plugin 插件

作用:通过 add-sourcesrc/main/scala 也加入到 源代码,实现 java 和 scala 分别都作为源代码目录 直接执行与编译

2、maven-assembly-plugin 插件

作用:将所有依赖 打成一个 fat jar 包(在大数据场景比较实用,直接整体打包为一个可执行包,避免不同应用间的依赖管理 和jar 冲突)

完整的 pom.xml 参考:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>maven-scala-java</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>maven-scala-java</name>
  
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <encoding>UTF-8</encoding>
    <scala.version>2.12.12</scala.version>
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.12.12</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>2.0.6</version>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/main/scala</source>
              </sources>
            </configuration>
          </execution>
          <execution>
            <id>add-test-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-test-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/test/scala</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <version>4.6.2</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
              <goal>testCompile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <scalaVersion>${scala.version}</scalaVersion>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <mainClass>com.example.RunJob</mainClass>
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
3、整体项目结构

image.png

通过 执行命令 : maven clean package
可以看到target 目录下生成了 xxx-1.0-SNAPSHOT-jar-with-dependencies.jar 即我们需要的可直接执行的jar 包。

0x 03、vs code 本地开发 spark/flink 程序

完成上诉后 其实也很简单了,这里就挑关键部分简短说明:

3.1 pom.xml 配置

核心就是 spark core spark sql 选择自己需要的版本,至于其他组件 如 stream,ml,graphx 等按需

  <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.binary.version}</artifactId>
      <version>${spark.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_${scala.binary.version}</artifactId>
      <version>${spark.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-mllib_${scala.binary.version}</artifactId>
      <version>${spark.version}</version>
    </dependency>
3.2 代码编写

核心逻辑就是创建 SparkSession 的时候 mater 选择 local[*] 即可本地直接运行调试
image.png
可以看到调试控制台 spark 跑得很欢快。flink 类似,不做赘述。

总结:

得益于强大得 metals,使得编程体验 还不错,基本上能覆盖日常开发办公得需求。当然 整体得工程体验 对比 idea 还是有些差距,idea集成性和易用性更好,不过个人觉得用vs code 也还可以,能干活,问题不大。 本文并没有完整的体现出 vs code 的特性。准备在下篇中,在服务器上安装 code server(vscode 浏览器版本)这样子 实现 WebIDE 的功能,代码和环境都在远端服务器上,本地只需要一个 浏览器就可以访问、编码、测试,想想还是挺爽的(jetbrains 也有类似的方案 jetbrains projector)

需要特别注意得点:
1、每次修改 pom.xml 后需要 重新 执行 import build
2、如果执行 import build 报错,要仔细检查 .metals/metals.log,针对具体的错误去解决问题;

### 配置和使用 VSCode 运行 Scala 程序 #### 安装必要的软件和支持工具 为了能够在 Visual Studio Code (VSCode) 中顺利运行 Scala 代码,需确保已安装 JavaScalaJava 是必需的基础环境,因为 Scala 构建于 JVM 上[^4]。 对于 Java 的安装,建议访问 Oracle 官方网站获取最新版 JDK 并完成安装过程[^2]。接着,前往 Scala 官网下载适合操作系统的 Scala 版本,并按照指引完成设置[^3]。 #### 设置开发环境 安装好上述依赖之后,在 VSCode 内部还需配置特定扩展来支持 Scala 编程: - **Scala Extension Pack**: 提供了完整的 Scala 支持功能集,包括但不限于语法高亮显示、智能感知以及最重要的调试能力[^1]。 - **其他辅助插件**:除了核心的 Scala 扩展外,还可以考虑安装 `Code Runner` 来快速测试片段;如果希望获得更好的用户体验,则可选配官方提供的 `Scala Syntax` 或者多语言支持如中文界面等附加组件。 #### 创建并执行简单的 Scala 应用程序 一旦所有准备工作就绪,就可以创建一个新的 `.scala` 文件用于编写代码。下面是一个经典的 Hello World 实例: ```scala object HelloWorld { def main(args: Array[String]): Unit = { println("Hello, world!") } } ``` 保存此文件为 `demo1.scala` 后,可以通过多种方式启动应用程序。最简便的方法之一就是利用 `Code Runner` 插件右键点击编辑器中的任意位置选择 “Run Code”,这会自动编译并立即展示输出结果。 另外一种更为专业的做法是借助 SBT(Simple Build Tool),它不仅能够管理构建流程还能有效处理复杂的项目结构。当涉及到更大型的应用场景时推荐采用这种方式来进行集成与部署工作[^5]。 #### 关联源码路径以便混合编程 考虑到实际应用场景中可能会存在 JavaScala 协同工作的需求,因此有必要让两者都能被识别为有效的源代码部分。通过 Maven 或 Gradle 等构建工具的帮助,可以轻松达成这一目标。具体来说就是在项目的 pom.xml 文件里添加相应的 `<build>` 节点,从而允许 IDE 自动索引来自不同语言模块下的资源文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值