gpt4 book ai didi

java - 从 Maven 插件扫描自定义注释类

转载 作者:行者123 更新时间:2023-12-04 04:42:50 25 4
gpt4 key购买 nike

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

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

任何帮助将不胜感激。

谢谢。

最佳答案

我找到了解决方案。
我使用递归函数在 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
}
} ...

关于java - 从 Maven 插件扫描自定义注释类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com