我有一个“简单的maven项目”,其中包含一些带有一些自定义注释类的包。 我目前正在开发一个maven插件,可以扫描我的“简单项目”以获取那些带注释的类,然后返回它们的名称和相关的包。
例如: simple-project / src / main / java / myApp / domain / Entity.java,实体用@MyCustomAnnotation注释 并且“my-maven-plugin”项目在“simple-project”pom.xml中声明
所以,如果我运行“mvn generator:myGoal”,它应该生成一个包含以下内容的文件:myApp.domain.Entity
我尝试了几乎所有在互联网上找到的东西,但没有真正起作用。 每次我运行目标时,我的插件都会扫描自己的类,而不是我的简单项目类。
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:2)
我找到了解决方案。 我使用递归函数在sourceDirectory上循环以查找所有文件。 以下是我从mojo获取sourceDirectory的方法:
/**
* Project's source directory as specified in the POM.
*
* @parameter expression="${project.build.sourceDirectory}"
* @readonly
* @required
*/
private final File sourceDirectory = new File("");
fillListWithAllFilesRecursiveTask(sourceDirectory);
我获取了这些文件的路径,然后使用com.google.code.javaparser来解析关联的FileInputStream。
public void fillListWithAllFilesRecursiveTask(final File root) {
CompilationUnit cu;
FileInputStream in;
try {
// we looped through root and we found a file (not a directory)
in = new FileInputStream(file);
cu = JavaParser.parse(in);
new MethodVisitor().visit(cu, file);
最后,我扩展了VoidVisitorAdapter以获取Annotations和成员......等等
private static class MethodVisitor extends VoidVisitorAdapter<File> {
@Override
public void visit(ClassOrInterfaceDeclaration n, File file) {
if (n.getAnnotations() != null) {
// store classes that are annotated
for (AnnotationExpr annotation : n.getAnnotations()) {
//here some logic
}
} ...