.meta是什么项目文件_Java 编译了一下,莫名多出了一些文件---JAT技术

背景:

最近团队在进行中台化建设,其中插件化方案使用的pf4j(后续会专门出文章介绍),开发完一个插件,打包发布的时候,META-INF下总是会生成一个文件 extensions.idx,此文件非常重要。但是我查看插件开发,过程中的配置以及业务代码,并没有什么地方可以指定此文件。

16259bc7f11491ac30f6d7ddaea03689.png

排查过程:

请教了团队中的资深开发,他之前可能没有注意到这个细节,一时半会也答不上来。此插件化技术方案,是我们团队第一次引用,我担心此框架了解不足,后续出现问题,没有人能cover住,于是拉下源码,自己看下。

拉代码以及排查过程,不再表述。咱们直接看核心代码。首先排查到了LegacyExtensionStorage

8e12c13ce9bc96766537bb6c2bcaae4d.png

最终排查到入口ExtensionAnnotationProcessor,如下所示:

分析过程:

要想弄清楚此问题,需要引入本次主角 JAT-- Annotation Processor Tool。

1.什么是APT?

APT即为Annotation Processing Tool,它是javac的一个工具。APT可以在编译时(javac默认行为)扫描和处理注解。通过APT可以获取到注解和被注解对象的相关信息,我们可以根据这些信息,灵活的做一些事情。获取注解及生成代码都是在代码编译时候完成的, APT并不能对源文件进行修改操作,只能生成新的文件,例如在已有的类中添加方法。APT的核心是AbstractProcessor类。

2.哪里用到了APT?

APT技术被广泛的运用在Java框架中,包括Android项以及Java后台项目,知名的项目很多都有用到,比如lombok,当然还是我们正在使用的pf4j。

ae4ac3db81f84b0e5179778a4fdd9a34.png

平时自己的项目中,也可以使用JAT,比如有的同学,利用JAT,检查项目中的事务,是不是注解有问题,例如打在了private方法上。有的同学,利用自己定义的注解,在编译的时候,生成一些样板代码等等。

3.如果使用JAT?

1)实现自己的processor继承javax.annotation.processing.AbstractProcessor。

2)项目的resources目录下,创建文件夹META-INF.services,然后创建一个文件

javax.annotation.processing.Processor

3)第二步创建的文件中,一行一个录入处理类的全限定命即可。

总结:

APT技术存在已经很长时间了,很遗憾工作好些年了,今天才知道,下面这张图是网上的一张截图,能简单的说明问题,贴出来大家一起学习下。

c324506d5cf2b7bd291f41f33df20e0b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值