最近接手其他人的项目,使用自定义UDTF来完成复杂异构数据的解析操作,根据文档进行测试之前的测试用例,发现Main函数识别不到。
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>2.3.2</version> <scope>provided</scope> </dependency> 然后正常的code,在UDF里写了main方法,运行提示我找不到或无法加载主类,发现依赖有个修饰
<scope>provided</scope> provided,就是这个providede,让我写测试方法可以运行,但是在程序里写main方法却提示找不到类, 增加provided的意思是这个依赖只在编译和测试阶段可以用,运行环境不可用,即打jar包不会将其放进去,即lib目录里不会有它。 总结scope里的字段意思 前言: 1.Maven依赖中scope的默认值是compile 2.scope制定了依赖(第三方jar包)的作用范围 3.作用范围包括,所在项目的测试、编译、运行、打包等生命周期 4.编译和运行还分为 测试代码的编译和运行、非测试代码的编译和运行 scope分类 test 测试范围 测试范围的依赖(第三方jar包),针对测试相关代码的编译和运行,在通常代码的编译和运行时都不需要,只有在有关测试的代码编译和运行测试阶段可用 compile 编译范围 依赖默认范围,即如果依赖没有scope,默认为<scope> compile </scope>,该依赖需要参与当前项目的编译、测试、运行、打包 runtime 不参加编译,但是后期的运行和测试需要 provided 与compile很像,使用它时,jar包运行的JDK或容器会提供它,所以不需要放入jar包,仅用于编译和测试环境 system与provided很像 被依赖项不会从maven仓库下载,而是从本地系统指定路径下寻找,需要 systemPath 属性