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

使用SBT构建Scala JAR时遇No main class detected错误求助

问题原因

你的代码是Hive UDF实现类,本身没有main方法,而sbt run命令需要找到包含main方法的类作为程序入口,所以会报"No main class detected"错误。UDF的设计是用于在Hive/Databricks中注册使用,不是直接通过run命令执行的。

解决方案

分两种场景处理:

场景1:仅需打包UDF JAR用于Databricks/Hive

不需要执行sbt run,直接执行打包命令生成JAR文件即可:

sbt package

打包完成后,JAR文件会生成在target/scala-2.12/udfdecrypt_2.12-0.1.0-SNAPSHOT.jar(具体名称根据项目配置略有不同),之后就可以在Databricks中通过spark.udf.register或Hive中ADD JAR+CREATE FUNCTION来使用这个UDF。

场景2:需要本地测试UDF逻辑

如果要在本地测试解密逻辑,添加一个带main方法的测试类:

package com.nm.udf

object UdfTest extends App {
  val udf = new udfDecrypt()
  // 替换为你的测试加密串和密钥
  val testInput = "your-fernet-token-here"
  val testKey = "your-fernet-key-here"
  val result = udf.evaluate(testInput, testKey)
  println(s"解密结果: $result")
}

添加后,执行sbt run时sbt会自动识别主类,也可以指定主类运行:

sbt "runMain com.nm.udf.UdfTest"
代码优化建议
  1. 移除重复导入:代码中重复导入了java.time.Duration和java.time.Instant,删掉其中一组即可。
  2. 简化Validator实例化:不需要匿名内部类,直接实例化:
// 原代码
val validator = new Validator() {}
// 修改为
val validator = new Validator()

内容的提问来源于stack exchange,提问作者Uyễn Lê

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:20