我目前正在使用com.sun.source.util.Plugin
的实现方式执行此操作,该实现方法具有将以下表达式添加到导入节import java.util.List;
的方法:
private void generateImport(CompilationUnitTree compilationUnitTree) {
var jcCompilationUnit = (JCTree.JCCompilationUnit) compilationUnitTree;
List<JCTree> imports = jcCompilationUnit.defs.stream()
.filter(def -> def.hasTag(JCTree.Tag.IMPORT))
.collect(Collectors.toList());
JCTree.JCImport classImport = treeMaker.Import(
treeMaker.Select(
treeMaker.Ident(names.fromString("java.util")),
names.fromString("List")
),
false
);
imports.add(classImport);
jcCompilationUnit.defs = List.from(imports);
}
名称-com.sun.tools.javac.util.Names
和 treeMaker的实例-com.sun.tools.javac.tree.TreeMaker
的实例
我将插件作为一个依赖项添加到一个A.java
的项目中,完成mvn package
之后,A.class
丢失了,我只有一个空的{{1} }目录。
看来我的解决方案是错误的。
所以问题是:如何在编译时将target
添加到import <something>
?
P.S。我一直在寻找在诸如 Lombok , MapStruct , Spoon 等项目中添加导入的方法,但是我没有找到任何类似的东西。