I solved it with the help of this link:
FWIW, none of Oracle's examples inject into the Batchlet (my use case). They are all injecting into the ItemReader or ItemWriter instances. However, their solution works for batchlets as well.
1. Annotate your batchlet with @Named
2. Annotate your batchlet with @Dependent
3. Refer to your batchlet in the Job XML by the bean name (not the class name).
Great you found the solution. Yes, CDI injection into batchlet, or any batch artifact, should work the same as injecting into ItemReader or ItemWriter. I guess it's just batchlet is used not as common as chunk ItemReader and ItemWriter, hence fewer examples.
jberet-support includes a built-in batchlet, JasperReportsBatchlet, that shows injections of various types:
@EJB and @Resource are non-CDI, kinda legacy injection annotations, which only work on Java EE component classes (like EJB bean classes, servlet class, servlet filters, web listeners, EJB interceptors, etc). A batch artifact itself is not Java EE component so @EJB or @Resource will not work. Any @Inject should just work in batch artifacts if properly wired.