我目前正在使用
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);
}
names -
com.sun.tools.javac.util.Names
的实例 & treeMaker - com.sun.tools.javac.tree.TreeMaker
的实例
我将我的插件作为依赖项添加到具有一个
A.java
的项目中,在 mvn package
完成后,A.class
丢失,我只有一个空的 target
目录。
看来我的解决方案是错误的。 所以问题是:如何在编译时将
import <something>
添加到 A.java
?
附注我一直在寻找在 Lombok、MapStruct、Spoon 和其他不太知名的项目中添加导入的方法,但我没有找到类似的东西。
除了忽略 Package 声明的部分之外,此解决方案有效。 使用您的解决方案,生成的导入语句将位于包声明之上,并导致编译错误。 如果您安排生成的导入行,那么它就可以工作。 感谢您的解决方案。