使用Intellij配合SBT开发时如何动态切换Provided依赖范围
配置sbt根据运行环境自动调整Spark依赖Scope
你可以通过识别IntelliJ运行时自动注入的系统属性,动态切换依赖的Scope,实现开发和打包场景的自动适配,具体配置如下:
- 新增环境判断逻辑
在build.sbt开头添加如下代码,判断当前是否在IntelliJ环境中运行:
// 识别是否为IntelliJ运行环境,IntelliJ启动时会自动注入idea.runid系统属性 val isRunInIdea = sys.props.contains("idea.runid") // 动态设置Spark相关依赖的Scope:IDEA运行时用Compile,打包时用Provided val sparkDepScope = if (isRunInIdea) Compile else Provided
- 修改依赖配置
将原有Spark、Hadoop相关依赖的Provided替换为上面定义的sparkDepScope变量即可:
libraryDependencies ++= Seq( "org.apache.hadoop" % "hadoop-aws" % sparkVersion % sparkDepScope, "org.apache.spark" %% "spark-core" % sparkVersion % sparkDepScope, "org.apache.spark" %% "spark-sql" % sparkVersion % sparkDepScope, "org.scala-lang" % "scala-library" % scalaVersion.value % Provided )
注意事项
- 如果你使用IntelliJ的原生运行器而非sbt run启动项目,可以手动在运行配置的「VM选项」中添加
-Didea.runid=local,触发判断逻辑生效 - 打包时直接在终端执行
sbt assembly即可,此时没有idea.runid属性,Spark相关依赖会保持Provided状态,不会被打入fat jar,不会导致包体积过大
内容的提问来源于stack exchange,提问作者Igor Gatis
相关产品推荐
相关产品推荐

