You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不依赖构建工具用scalac编译含Spark依赖的Scala程序?

问题:scalac编译含Spark依赖的Scala程序无法找到依赖

待编译的Scala代码

import org.apache.spark.sql.SparkSession     

object Main {
  def main(args: Array[String]) {                    
    if (args.length < 1) {                                
      System.err.println("Usage: HDFStEST <file>")                                                                
      System.exit(1)                    
    }                                                                                                                              
    val spark = SparkSession.builder.appName("TesteHelena").getOrCreate()                                                                
    println("hellooo") 
    spark.stop() 
  }                                                                                                                                                    
}             

尝试过的编译命令及报错

  1. 命令:
scalac main.scala -cp C:\Spark\spark-2.4.0-bin-hadoop2.7\jars -d main.jar

报错:

main.scala:1: error: object apache is not a member of package org
import org.apache.spark.sql.SparkSession
  1. 命令:
scalac main.scala -cp C:\Spark\spark-2.4.0-bin-hadoop2.7\jars\* org.apache.spark.sql.SparkSession -d main.jar

报错(每个jar包都出现类似错误):

error: IO error while decoding C:\Spark\spark-2.4.0-bin-hadoop2.7\jars\aircompressor-0.10.jar with UTF-8
  1. 命令:
scalac main.scala -cp org.apache.spark.sql.SparkSession -d main.jar

报错:

main.scala:1: error: object apache is not a member of package org
import org.apache.spark.sql.SparkSession

解决方案

核心问题分析

  • 命令1:-cp指向jars目录时,scalac不会自动加载目录内的所有jar包,必须用通配符*指定。
  • 命令2:Windows环境下未给通配符加引号,导致CMD将*展开为所有jar文件名,scalac误将jar文件当作源码文件处理,引发解码错误;同时多余添加了类名参数,属于命令格式错误。
  • 命令3:-cp后直接写类名完全错误,类路径需指向jar文件或包含类文件的目录。

正确编译步骤

  1. 确认版本兼容:Spark 2.4.0对应Scala 2.11.x版本,确保使用的scalac是2.11系列版本,避免兼容性问题。
  2. Windows环境下的正确编译命令:
    在CMD中执行,注意给通配符加双引号,防止CMD自动展开:
    scalac -encoding UTF-8 main.scala -cp "C:\Spark\spark-2.4.0-bin-hadoop2.7\jars\*" -d classes
    
    • -encoding UTF-8:指定编码,避免解码错误;
    • -cp "...":正确指定所有Spark依赖jar包的路径;
    • -d classes:将编译后的字节码输出到classes目录(可提前创建或让命令自动生成)。
  3. 打包成可执行jar(可选):
    编译完成后,用jar命令将classes目录下的字节码打包成jar文件:
    jar cvf main.jar -C classes/ .
    

内容的提问来源于stack exchange,提问作者HSILS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:57:18