从maven插件扫描自定义带注释的类

时间:2013-09-05 11:14:32

标签: java maven plugins annotations

我有一个“简单的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

我尝试了几乎所有在互联网上找到的东西,但没有真正起作用。 每次我运行目标时,我的插件都会扫描自己的类,而不是我的简单项目类。

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 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
                    }
                } ...