使用 VS Code 搭建 java + scala 开发环境
bigegpt 2024-10-23 08:47 2 浏览
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
安装好后 配置环境变量
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
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(当前最新)
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功能
此处可能引发的报错为 ERROR Opening a bsp server connection with 'bsp --protocol tcp --port
笔者的解决办法是 通过设置 metals 的 java home 解决
4、若上述操作顺利的化,咱们进入到资源管理 进行的编码运行测试
笔者这里简单的添加一些测试代码,并添加了 fastjson maven包,可以看到,Hello.Scala 上面有一个 run|debug 标识的,在这里 直接点击 run 就可以运行了,是不是也很方便?
需要注意的是 当在pom.xml 中添加了 dependency 后,需要在执行一次 import build ,这样编辑器界面 导入包 才有提醒 。
2.2 maven 同时支持 java 和 scala 混合打包
1、build-helper-maven-plugin 插件
作用:通过 add-source 将 src/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、整体项目结构
通过 执行命令 : 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[*] 即可本地直接运行调试
可以看到调试控制台 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 ,针对具体的错误去解决问题;
相关推荐
- Docker篇(二):Docker实战,命令解析
-
大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...
- docker学习笔记——安装和基本操作
-
今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...
- 不可错过的Docker完整笔记(dockerhib)
-
简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...
- 扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!
-
其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...
- 第五节 Docker 入门实践:从 Hello World 到容器操作
-
一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...
- 替代Docker build的Buildah简单介绍
-
Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...
- Docker 命令大全(docker命令大全记录表)
-
容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...
- docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)
-
一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...
- 使用Docker快速部署Storm环境(docker部署confluence)
-
Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...
- Docker Desktop安装使用指南:零基础教程
-
在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...
- Linux如何成功地离线安装docker(linux离线安装httpd)
-
系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...
- Docker 类面试题(常见问题)(docker面试题目)
-
Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...
- 面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?
-
最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...
- 【Docker 新手入门指南】第五章:Hello Word
-
适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...
- 松勤软件测试:详解Docker,如何用portainer管理Docker容器
-
镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...
- 一周热门
- 最近发表
-
- Docker篇(二):Docker实战,命令解析
- docker学习笔记——安装和基本操作
- 不可错过的Docker完整笔记(dockerhib)
- 扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!
- 第五节 Docker 入门实践:从 Hello World 到容器操作
- 替代Docker build的Buildah简单介绍
- Docker 命令大全(docker命令大全记录表)
- docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)
- 使用Docker快速部署Storm环境(docker部署confluence)
- Docker Desktop安装使用指南:零基础教程
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)