有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java扫描maven插件中的自定义注释类

我有一个“SimpleMaven项目”,它包含一个带有一些自定义注释类的包。 我目前正在开发一个maven插件,它可以扫描我的“简单项目”中那些带注释的类,然后返回它们的名称和相关的包

例如: 简单项目/src/main/java/myApp/domain/Entity。带有@MyCustomAnnotation注释实体的java “MyMaven插件”项目在“简单项目”pom中声明。xml

因此,如果我运行“mvn生成器:myGoal”,它将生成一个包含以下内容的文件:myApp。领域实体

我在网上找到的几乎所有东西都试过了,但都没用。 每次我运行我的目标时,我的插件都会扫描它自己的类,但不会扫描我的简单项目类

任何帮助都将不胜感激

谢谢


共 (1) 个答案

  1. # 1 楼答案

    我找到了解决办法。 我使用递归函数在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。谷歌。密码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以获取注释和成员。。。等

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