手工编译hive udf包

本文分享了在Java开发中遇到的内部类使用及编译问题解决方案,包括如何正确实现内部类以避免实例依赖,以及确保内部类正确编译和打包的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天在修改原先的dkrs的时候,遇到了几个问题:

1,内部类问题,原先是用三个数组来实现的,改成用一个object的list,一开始采用普通的内部类,一直显示new 这个类的时候,会报错,需要将父亲实例化了之后才能使用内部类,说明内部类是依赖于实例存在的。后来听同事说明,将其改成静态的类,就可以直接new了。

public class dkrs extends UDF {
private static ArrayList<IdEntity> pub_entity_list=new ArrayList<IdEntity>();
private static class IdEntity {
public Long minId;
public Long maxId;
public String dateStr;
IdEntity(){
}
public IdEntity(Long minId, Long maxId, String dateStr) {
this.minId = minId;
this.maxId = maxId;
this.dateStr = dateStr;


}
}

2,由于我机器上的环境和线上的环境不太一样,所以每次都是脚本写好后,传到相关的机器上,进行现场编译的。所以遇到了个内部类not found的问题。困扰了很久,后来才发现,及时内部类也会生成一个class文件,打包的时候需要将这个文件给包进来的,否则会一直提示class不存在。

dkrs$IdEntity.class

dkrs$1.class

dkrs.class

jar 的时候需要将这三个类都打包进去,尤其是前面两个带$符号的。一开始的时候忘记了,导致报错很长时间。

加进去之后就ok了。


过几天要写个自动化编译的脚本,麻烦死了。。。初步思想是:先scp源文件过来,然后进行本地编译,然后将编译好的文件打包,最后进行测试,测试用例可以用户自己输入。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值