2

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

例如:simple-project/src/main/java/myApp/domain/Entity.java 带有用@MyCustomAnnotation 注释的Entity,并且在“simple-project” pom.xml 中声明了“my-maven-plugin”项目

因此,如果我运行“mvn generator:myGoal”,它应该生成一个包含以下内容的文件:myApp.domain.Entity

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

任何帮助,将不胜感激。

谢谢。

4

1 回答 1

3

我找到了解决方案。我使用递归函数在 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 以获取注释和成员...等

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
                    }
                } ...
于 2013-09-08T20:25:33.653 回答